PL/SQL块结构

     PL/SQL块结构分为两种:匿名块和命名块。

    PL/SQL块分成三个部分:

    declare ---可选

        定义部分:包括定义常量、变量、游标、异常以及复杂的数据类型等

    begin    ----必选

       执行部分:包含了要执行的PL/SQL语句和SQL语句,用于实现应用模块的功能

    exception  ----可选

        --异常处理部分

    end;  ----必选

 

最简单的PL/SQL块:

    BEGIN

        NULL;

    END;

其中NULL语句是一个可执行语句,表示什么都不做,相当于一个不执行任何操作的占位符。

但是如果代码如下:

    begin

    end;

则会报错,因为PL/SQL块至少得有一条执行命令。

 

匿名块举例:

----循环结构示例,演示循环为所有员工加薪
declare
  v_deptcount number(2);        --定义记录数变量
  v_deptno    number(2) := 60;  --定义并为变量赋初值
begin
  --查询SQL语句,将字段值写入变量
  select count(1)
         into v_deptcount
         from dept
         where deptno = v_deptno;
  --如果记录数为0,表示无此编号的部门
  if v_deptcount = 0
    then
      insert into dept
             values(v_deptno,'财务部','深圳');
      --写入屏幕信息
      dbms_output.put_line('成功插入部门资料!');
  end if;
exception
  when others
    then
      dbms_output.put_line('部门资料插入失败!');
end;

 

嵌套块:PL/SQL块中可以嵌套子块,嵌套的块既可以放在外部块的执行部分,也可以放在异常处理部分,但是不能放在声明部分,内部嵌套块可以访问外部块中定义的变量,但是外部块不能访问内部快中定义的变量

 

--使用嵌套块更新和插入部门表
declare
  v_deptcount       number(2);
  v_deptno          number(2) := 60;
  v_deptname        varchar2(12);
begin
  --内部嵌套块
  begin
    select dname into v_deptname from dept where deptno = v_deptno;
    dbms_output.put_line('你查询的部门名称为:'||v_deptname);
  end;
  --内部嵌套块
  declare
    v_loc        varchar2(10) := '深圳罗湖';
  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);
       end;
end;

 

命名嵌套块

--命名嵌套块
declare
  v_deptcount       number(2);
  v_deptno          number(2) := 60;
  v_deptname        varchar2(12);
begin
  --内部嵌套块
  <<查询员工名称块>>
  begin
    select dname into v_deptname from dept where deptno = v_deptno;
    dbms_output.put_line('你查询的部门名称为:'||v_deptname);
  end;
  --内部嵌套块
  <<更新员工纪录块>>
  declare
    v_loc        varchar2(10) := '深圳罗湖';
  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);
       end;
end;

 

从代码中可以看出,匿名块和命名块最大的不同在于命名块具有了一个语句块名称的声明,其余内容完全一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值