PL/SQL块分类


  1. PL/SQL块分类

    1.匿名块

    declare

      v_avgsal number(6,2);

    begin

      select avg(sal) into v_avgsal from emp

      where deptno=&no;

      dbms_output.put_line('平均工资:'||v_avgsal);

    end;

     

    2.命名块

    <<outer>>

    declare

      v_deptno number(2);

      v_dname varchar2(10);

    begin

      <<inner>>

      begin

              select deptno into v_deptno from emp

              where lower(ename)=lower('&name');

      end;--<<inner>>

      select dname into v_dname from dept

      where deptno=v_deptno;

      dbms_output.put_line('部门名:'||v_dname);

    end;--<<outer>>

     

    3.子程序(子程序包括过程、函数和包)

    (1)过程

      过程用于执行特定操作。当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out)

      create procedure update_sal(newname varchar2,newsal number)

      is

      begin

             update emp set sal=newsal

             where lower(ename)=lower(newname);

      end;

    调用该过程时,可以使用execute命令或call命令。示例如下:

    execute update_sal('scott',2000)

    call update_sal('scott',2000)

     

    (2)函数

      函数用于返回特定数据。当建立函数时,在函数头部必须包含 return 子句,而在函数体内必须包含 return 语句的返回数据。

      create function annual_income(newname varchar2)

      return number is

             annual_salary number(7,2);

      begin

             select sal*12+nvl(comm,0) into annual_salary

             from emp where lower(ename)=lower(newname);

             return annual_salary;

      end;

     

    调用

      var income number

      call annual_income('scott') into :income

      print income

     

    (3)

      包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数。

      create package emp_pkg is

             procedure update_sal(newname varchar2,newsal number);

             function annual_income(newname varchar2);

      end;

     

      create package body emp_pkg is

             procedure update_sal(newname varchar2,newsal number)

             is

             begin

                       update emp set sal=newsal

                       where lower(ename)=lower(newname);

             end;

             function annual_income(newname varchar2)

             return number is

                       annual_salary number(7,2);

             begin

                       select sal*12+nvl(comm,0) into annual_salary

                       from emp where lower(ename)=lower(newname);

                       return annual_salary;

             end;

      end;

     

    当调用包的过程和函数时(包名.子程序名)

      execute emp_pkg.update_sal('scott',2000)

     

    4.触发器

      触发器是隐含执行的存储过程。当定义触发器时,必须要指定触发器事件以及触发操作,常用的触发事件包括 insertupdate delete 语句,而触发操作实际是一个PL/SQL块。

      create trigger update_cascade

             after update of deptno on dept

             for each row

      begin

             update emp set deptno=:new.deptno

             where deptno=:old.deptno;

      end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值