源码-Oracle数据库管理-第十二章-使用PL/SQL创建Oracle程序-Part 2(PL/SQL语言概览)

这部分很基础。

--12.2 PL/SQL语言概览
--12.2.1 PL/SQL块

--代码12.6 最简单的PL/SQL匿名块
BEGIN
   NULL;           --最简单的PL/SQL语句块
END;

--代码12.7 完整的PL/SQL语句块
DECLARE
   v_deptcount   NUMBER (2);                                 --定义员工记数器变量
   v_deptno      NUMBER (2) := 94;                            --定义并为变量赋初值
BEGIN
   --查询v_deptno变量所代表的员工编号是否存在
   SELECT COUNT (1)
     INTO v_deptcount
     FROM dept
    WHERE deptno = v_deptno;
   IF v_deptcount = 0                                           --如果记录数等于0,表示无此编号的部门
   THEN
      INSERT INTO dept
           VALUES (v_deptno, '财务部', '深圳');                    --执行插入操作
      --写入屏幕信息
      DBMS_OUTPUT.put_line ('成功插入部门资料!');
      commit;
   END IF;
EXCEPTION                                                   --异常处理块
   WHEN OTHERS
   THEN                                                      --如果出现任何异常
      DBMS_OUTPUT.put_line ('部门资料插入失败');               --显示异常信息
END;

select distinct deptno from dept;

select * from dept;


--12.2.2 嵌套块
--代码12.8 PL/SQL嵌套块示例
DECLARE
   v_deptcount   NUMBER (2);                                 --定义记录数变量
   v_deptno      NUMBER (2)    := 1;                        --定义并为变量赋初值
   v_deptname    VARCHAR2 (12);
BEGIN
   --内部嵌套块
   BEGIN
      SELECT dname
        INTO v_deptname
        FROM dept
       WHERE deptno = v_deptno;                              --在嵌套块中可以直接使用外部块中定义的变量
    EXCEPTION                                               --异常处理区
      WHEN NO_DATA_FOUND THEN                               --捕掉异常
        DBMS_OUTPUT.put_line ('您查询的部门不存在');
        RAISE;                                      
   END;
   --内部嵌套块
   DECLARE
      v_loc   VARCHAR2 (20) := '深圳罗湖';                   --在子块中定义变量
   BEGIN
      --执行插入操作
      UPDATE dept
         SET loc = v_loc
       WHERE deptno = v_deptno;
      --写入屏幕信息
      DBMS_OUTPUT.put_line ('在内部嵌套块中成功更新部门资料!');
   END;
EXCEPTION                                                   --异常处理块
   WHEN NO_DATA_FOUND
   THEN                                                      --如果出现任何异常
      BEGIN                                                  --在异常处理块内部嵌套块
         INSERT INTO dept
              VALUES (v_deptno, '财务部', '深圳');
         DBMS_OUTPUT.put_line ('在异常处理嵌套块成功插入部门资料!');
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line (SQLERRM);                  --如果在嵌套块中出现异常,输出SQL错误消息
      END;
END;


--代码12.9 使用命名块

DECLARE
   v_deptcount   NUMBER (2);                                 --定义记录数变量
   v_deptno      NUMBER (2)    := 90;                        --定义并为变量赋初值
   v_deptname    VARCHAR2 (12);
BEGIN
   <<获取部门名称的块>>
   BEGIN
      SELECT dname
        INTO v_deptname
        FROM dept
       WHERE deptno = v_deptno;                              --在嵌套块中可以直接使用外部块中定义的变量
    EXCEPTION                                               --异常处理区
      WHEN NO_DATA_FOUND THEN                               --捕掉异常
        DBMS_OUTPUT.put_line ('您查询的部门不存在');
        RAISE;                                      
   END;
   <<更新部门地址的块>>
   DECLARE
      v_loc   VARCHAR2 (20) := '深圳罗湖';                   --在子块中定义变量
   BEGIN
      --执行插入操作
      UPDATE dept
         SET loc = v_loc
       WHERE deptno = v_deptno;
      --写入屏幕信息
      DBMS_OUTPUT.put_line ('在内部嵌套块中成功更新部门资料!'||更新部门地址的块.v_loc);
   END;
EXCEPTION                                                   --异常处理块
   WHEN NO_DATA_FOUND
   THEN      
    <<异常处理嵌套块>>                                        --如果出现任何异常
      BEGIN                                                  --在异常处理块内部嵌套块
         INSERT INTO dept
              VALUES (v_deptno, '财务部', '深圳');
        -- DBMS_OUTPUT.put_line ('在异常处理嵌套块成功插入部门资料!'||更新部门地址的块.v_loc);
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line (SQLERRM);                  --如果在嵌套块中出现异常,输出SQL错误消息
      END;
END;


--12.2.3 变量和数据类型
--代码12.10 定义标量变量
DECLARE
  part_number       NUMBER(6);     --SQL数据类型
  part_name         VARCHAR2(20);  --SQL数据类型
  in_stock          BOOLEAN;       --仅PL/SQL使用的数据类型
  part_price        PLS_INTEGER;  --仅PL/SQL使用的数据类型
  part_description  VARCHAR2(50);  --SQL数据类型
  hours_worked    INTEGER := 40;   --定义变量并赋初值
  employee_count  INTEGER NOT NULL := 0;    --定义变量并指定NOT NULL约束
  hire_date    DATE DEFAULT SYSDATE;   --使用DEFAULT关键字指定初始值
BEGIN
  NULL;
END;


--代码12.11 使用赋值运算符为变量赋值
DECLARE
  part_number       NUMBER(6);     --SQL数据类型
  part_name         VARCHAR2(20);  --SQL数据类型
  in_stock          BOOLEAN;       --仅PL/SQL使用的数据类型
  part_price        PLS_INTEGER;  --仅PL/SQL使用的数据类型
  part_description  VARCHAR2(50);  --SQL数据类型
  hours_worked    INTEGER := 40;   --定义变量并赋初值
  employee_count  INTEGER NOT NULL := 0;    --定义变量并指定NOT NULL约束
  hire_date    DATE DEFAULT SYSDATE;   --使用DEFAULT关键字指定初始值
BEGIN
  part_number:=38;
  part_name:='水管';
  in_stock:=True;
  part_price:=100/part_number;
  part_description:='镀银软管';
  DBMS_OUTPUT.put_line(part_number||CHR(13)||part_price); 
END;



--代码12.12 使用select into 语句为变量赋值
DECLARE
  v_sal    emp.sal%TYPE;               --定义3个与emp表中相应列相同类型的变量
  v_empno  emp.empno%TYPE;
  v_deptno emp.deptno%TYPE;
BEGIN
  SELECT empno, sal, deptno           --使用SELECT INTO为变量赋值
    INTO v_sal, v_empno, v_deptno
    FROM emp
   WHERE empno = 7369;
EXCEPTION                            --避免TOO_MANY_ROWS异常,这里进行了捕捉
  WHEN TOO_MANY_ROWS THEN
    DBMS_OUTPUT.put_line('返回了多行数据');
END;



--常量的定义
DECLARE
 program_title constant varchar2(50) := 'PL/SQL编程你会吗?';
BEGIN
 DBMS_OUTPUT.put_line(program_title);
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值