225025 发表于 2018-10-23 07:20:39

PL/SQL-05

  过程、函数与包
  过程、函数与包都属于PL/SQL语句块的命名块,过程和函数统称为子程序。
  过程和函数非常相似,具有如下特点:
  1、都具有名称,可以接收传入或者传出参数
  2、都具有声明部分,执行部分,异常处理部分
  3、在使用前会被编译并存储到数据库中
  4、函数和过程的最大区别在于函数具有返回值,而过程没有
  create or replace procedure addempsalary ( p_ratio number , p_empno number )
  as
  begin
  if p_ratio > 0
  then
  update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
  end if;
  dbms_output.put_line('加薪成功!');
  end ;
  包是一个逻辑单位,PL/SQL可以让开发人员把逻辑相关的类型、变量、游标和子程序放在一个包内,这样更加清楚,易于理解
  包规范部分:包规范部分定义了应用程序的接口,他声明了变量、常量、类型、异常、游标等。
  包体部分:包体部分用于实现包规范部分声明的子程序和游标。
  包规范的建立使用 create package 语句 , 包体的建立使用create package body语句。
  /* 包规范定义 */
  create or replace package empsalary
  as
  --执行实际的加薪动作
  procedure addempsalary (p_ratio number , p_empno number ) ;
  --使用if-elsif 语句得到加薪比例
  function change_sal (p_job varchar2) return number ;
  --使用case 语句得到加薪比率
  function getaddsalaryratiocase (p_job varchar2) return number ;
  end empsalary ;
  /* 包体定义 */
  create or replace package body empsalary
  as
  --过程加薪
  procedure addempsalary ( p_ratio number , p_empno number )
  as
  begin
  if p_ratio > 0
  then
  update scott.emp set sal = sal * ( 1 + p_ratio) where empno = p_empno ;
  end if;
  dbms_output.put_line('加薪成功!');
  end ;
  --使用if-elsif 语句得到加薪比例
  function change_sal (p_job varchar2)
  return number
  as v_result number(7,2) ;
  begin
  ifp_job = 'CLERK' then v_result := 0.1 ;
  elsif p_job = 'SALESMAN' then v_result := 0.15 ;
  elsif p_job = 'MANAGER' then v_result := 0.2 ;
  end if;
  return v_result ;
  end;
  --使用case 语句得到加薪比率
  function getaddsalaryratiocase ( p_job varchar2 ) return number
  as v_result number (7,2) ;
  begin
  case p_job
  when 'CLERK' then v_result := 0.10 ;
  when 'SALESMAN' then v_result := 0.15 ;
  when 'MANAGER' then v_result := 0.20 ;
  end case ;
  return v_result;
  exception when others
  then dbms_output.put_line('产生异常:');
  end ;
  end empsalary;

页: [1]
查看完整版本: PL/SQL-05