PL/SQL-04
过程、函数与包
过程、函数与包都属于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
if p_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;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。