简单的pl/sql程序

  1. declare
  2. begin
  3. dbms_output.put_line('hello world');
  4. end;
什么是PL/SQL?
pl/sql(Procedure language/SQL)
plsql是oracle对sql语言的过程化扩展
指在sql命令语方中增加了过程处理语句(如分支、循环等),使sql语言具有过程处理能力。
 
PL/SQL程序结构
  1. declare
  2. 说明部分(变量说明,光标申明,例外说明)
  3. begin
  4. 语句序列(DML语句)...
  5. exception
  6. 例外处理语句
  7. end;
  8. /
变量和常量说明
说明变量(char, varchar2, date, number, boolean, long)
例如:
  1. a char(15);
  2. b boolean:=true;
  3. c number(8,2);
  4. --myName的类型与emp表中的ename列类型一样
  5. myName emp.ename%type;
  6. --记录型变量
  7. myRec emp%rowtype;
IF语句
  1. IF 条件 THEN 语句1;
  2. 语句2;
  3. END IF;
  4.  
  5. IF 条件 THEN 语句序列1;
  6. ELSE 语句序列2;
  7. END IF;
  8.  
  9. IF 条件 THEN 语句;
  10. ELSIF 语句 THEN 语句;
  11. ELSE 语句;
  12. END IF;
  1. --接收键盘输入
  2. --num: 地址值,在该地址上 保存了输入的值
  3. accept num prompt '请输入一个数字';
  4.  
  5. declare
  6. --定义变量保存输入的数字
  7. pnum number := #
  8. begin
  9. if pnum = 0 then dbms_output.put_line('您输入的是0');
  10. elsif pnum = 1 then dbms_output.put_line('您输入的是1');
  11. elsif pnum = 2 then dbms_output.put_line('您输入的是2');
  12. else dbms_output.put_line('其他数字');
  13. end if;
  14. end;
  15. /

循环语句

  1. WHILE total<100
  2. LOOP
  3. ...
  4. total:=total+1;
  5. END LOOP;
  6.  
  7. LOOP
  8. EXIT [when 条件];
  9. ...
  10. END LOOP;
  11.  
  12. FOR I IN 1..3
  13. LOOP
  14. 语句序列;
  15. END LOOP;
  1. --输出从1-10
  2. declare
  3. num number(10) := 1;
  4. begin
  5. while num <= 10 loop
  6. dbms_output.put_line(num);
  7. num := num + 1;
  8. end loop;
  9. end;
  10.  
  11. --输出从1-10
  12. declare
  13. num number(10) := 1;
  14. begin
  15. loop
  16. exit when num > 10;
  17. dbms_output.put_line(num);
  18. num := num + 1;
  19. end loop;
  20. end;
  21. --输出从1-10
  22. declare
  23. num number(10) := 1;
  24. begin
  25. for num in 1 .. 10 loop
  26. dbms_output.put_line(num);
  27. end loop;
  28. end;
光标(Cursor)==ResultSet
说明光标语法:
  1. CURSOR 光标名 [(参数名 数据类型[,参数名 数据类型]...)]
  2. IS SELECT 语句;
用于存储一个查询返回的多行数据
  1. cursor cr is select ename from emp;
  1. 打开光标: open cr;
  2. 取一行光标值: fetch cr into pename;
  3. 关闭光标:close cr;
(*注意:pename必须与emp表中的ename类型一致。)
  1. declare
  2. --定义光标
  3. cursor cr is select ename, sal from emp;
  4. pname emp.ename%type;
  5. psal emp.sal%type;
  6. begin
  7. --打开光标
  8. open cr;
  9. loop
  10. --退出条件,没有找到记录
  11. exit when cr%notfound;
  12. --取记录
  13. fetch cr into pname, psal;
  14. --打印数据
  15. dbms_output.put_line(pname || '工资是' || psal);
  16. end loop;
  17. --关闭光标
  18. close cr;
  19. end;

带参数的光标

  1. cursor cr(no varchar2)
  2. is select ename,sal from emp where deptno=no;
  1. declare
  2. cursor cr(no number) is select ename,sal from emp where deptno=no;
  3. pname emp.ename%type;
  4. psal emp.sal%type;
  5. begin
  6. --打开光标
  7. open cr(10);
  8. loop
  9. --退出条件,没有找到记录
  10. exit when cr%notfound;
  11. --取记录
  12. fetch cr into pname, psal;
  13. --打印数据
  14. dbms_output.put_line(pname || '工资是' || psal || '涨工资' || (psal+1000));
  15. end loop;
  16. --关闭光标
  17. close cr;
  18. end;

例外

例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性。
1、系统定义例外
No_data_found 没有找到数据
Too_many_rows select ... into 语句匹配多个行
Zero_Divide 被零除
Value_error 算术或转换错误
Timeout_on_resource 等待资源发生超时
2、用户定义例外
  1. declare中定义例外
  2. myExce exception;
  3. 在可执行语句中引起例外
  4. raise myExce;
  5. Exception节处理例外
  6. when myExce then ...
  1. declare
  2. cursor cr is select ename, comm from emp;
  3. pname emp.ename%type;
  4. pcomm emp.comm%type;
  5. myexce exception;
  6. begin
  7. --打开光标
  8. open cr;
  9. loop
  10. --退出条件,没有找到记录
  11. exit when cr%notfound;
  12. --取记录
  13. fetch cr into pname, pcomm;
  14. --引发例外
  15. if pcomm is null then raise myexce;
  16. end if;
  17. dbms_output.put_line(pname || '的comm不是空');
  18. end loop;
  19. --关闭光标
  20. close cr;
  21. exception
  22. --处理例外
  23. when myexce then
  24. dbms_output.put_line(pname || '的comm是空的');
  25. end;

oracle pl/sql程序的更多相关文章

  1. Oracle数据库之PL/SQL程序设计基础

    PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...

  2. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  3. Oracle数据库之PL/SQL程序基础设计

    一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执 ...

  4. Oracle PL/SQL随堂笔记总结

    1.pl/sql编程 2.存储过程 3.函数 4.触发器 5.包 6.pl/sql基础 -定义并使用变量 7.pl/sql的进阶 8.oracle的视图 1.pl/sql编程 1.理解oracle的p ...

  5. Oracle PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  6. oracle pl/sql split函数

    在软件开发过程中程序员经常会遇到字符串的拼接和拆分工作. 以java开发为例: 前台传入字符串拼接形式的一个JSON数据,如:"1001,1002,1003",这可能代表了一组序号 ...

  7. [Oracle] PL/SQL学习笔记

    -- 1. 使用一个变量 declare -- Local variables here v_name ); begin -- Test statements here select t.user_n ...

  8. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  9. oracle PL/SQL基础编程

    PL/SQL(Procedural Language/SQL)是oracle中引入的一种过程化编程语言 PLS-00103:出现符号"declare"在需要下列之一时 符号&quo ...

随机推荐

  1. Protocol Buffer Basics: Python

    原文https://developers.google.com/protocol-buffers/docs/pythontutorial Protocol Buffer Basics: Python ...

  2. Oracle 同一个字段的两值进行加减计算

    如 病人ID      入院日期                出院日期 00001      2016-09-01          2016-09-10 00001      2016-09-15 ...

  3. ubuntu18.04 安装hadoop 2.7.3+hive 2.3.4

    1. 安装hadoop 详细请参见本人的另外一片博文<Hadoop 2.7.3 分布式集群安装> 2. 下载hive 2.3.4 解压文件到/opt/software -bin.tar.g ...

  4. UNDO三大作用与一致性读机制浅析

    UNDO三大作用1.一致性读(consistent read)2.事务回滚(Rollback Transaction)3.实例恢复(Instance Recovery) 一致性读当会话发出一条SQL查 ...

  5. php使用ffmpeg向视频中添加文字字幕

    这篇文章主要介绍了PHP使用ffmpeg给视频增加字幕显示的方法,实例分析了php操作ffmpeg给视频增加字母的技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 本文实例讲述了PHP使用ffmpe ...

  6. Linux下Nagios的安装与配置 及遇到的坑

    原文http://www.jianshu.com/p/7bc822fa8278 不愿意看前5.6c部分可以直接跳到最后看命令. 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能 ...

  7. Noip2011Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  8. 更新OpenSSH

    1.安装必要组件: yum install -y gcc openssl-devel pam-devel rpm-build 2.下载OpenSSH最新版本: https://ftp.openbsd. ...

  9. html 更新

    HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5 ...

  10. js、C#获取当前url的参数值

    之前很想做一些封装关于获取URL参数值方法,今天简单整理了一下js和后台代码获取url参数值的方法,有什么不好地方,还请大家包涵,代码如下: 1.JS处理URL参数值 <script langu ...