plsql 函数与过程的定义及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
plsql 函数与过程的定义及应用
存储过程与函数1、存储过程存储过程的参数形式参数和实际参数,例如,有如下一个存储过程,该过程接收一个作家代码和一个工资值,将该作家的工资改为接收到的工资值。代码create or replace procedure
updateauths( p_authscode auths.author_code%type,
p_authssalary auths.salary%type) as begin update auths set salary=p_authssalary where
author_code=p_authscode; commit; end updateauths; create or replace procedure updateauths(p_authscode auths.author_code%type,p_authssalary
auths.salary%type)asbeginupdate auths set
salary=p_authssalary where
author_code=p_authscode;commit;end updateauths;下面的PL/SQl块调用updateauths存储过程,将代码为A00011的作家的工资改为350元。代码declare v_authorcode auths.author_code%type:='A00011'; v_salary
auths.salary%type:=350; begin
updateauths(v_authorcode,v_salary); end;
declarev_authorcode
auths.author_code%type:='A00011';v_salary
auths.salary%type:=350;beginupdateauths(v_authorcode, v_salary);end;
v_authorcode、v_salary作为参数传递到存储过程updateauths中,这些参数是实际参数,简称实参。
p_authscode、p_authssalary就是形式参数,简称形参。参数定义中,IN、OUT和IN OUT代表参数的三种不同模式:IN:当调用存储过程时,该模式的形参接收对应实参的值,并且该是只读的,即不能被修改。默认为IN。
OUT:该形参被认为只能写,既只能为其赋值。在存储过程中不能读它的值。返回时,将该形参值传给相应的实参。IN OUT:都允许。代码create or replace procedure updateauthssalary( p_author_code in out
auths.author_code%type, p_salary in number, p_name out %type) is v_salary_temp number; --定义存储过程中的局部变量begin select salary into v_salary_temp from auths where author_code=p_author_code; if
v_salary_temp300 then update auths set salary=p_salary where author_code=p_author_code; end if; select name into p_name from auths where author
code=p_author_code; end updateauthssalary; create or replace procedure updateauthssalary(p_author_code in out auths.author_code%type,p_salary in number,p_name
out %type) isv_salary_temp number; --定义存储过程中的局部变量beginselect salary into v_salary_temp from auths where author_code=p_author_code;if
v_salary_tempupdate auths set salary=p_salary where author_code=p_author_code;end if;select name into
p_name from auths where author
code=p_author_code;end updateauthssalary;(1)参数的数据类型在定义一个存储过程参数时,不能指定CHAR类型和VARCHAR2类型形参的长度,也不能指定NUMBER形参的精度和标度。这些约束由实参来传递。例如,下面的存储过程定义不合法,将产生一个编译错误:代码create or replace procedure proc_auths( --参数定义了类型长度,将产生编译错误。p_code in out varchar2(6), p_salary out number(8,2)) as begin select salary into p_salary from auths where author_code=p_code; end proc_auths; create or replace procedure proc_auths(--参数定义了类型长度,将产生编译错误。p_code in out varchar2(6),p_salary out number(8,2)) asbeginselect salary into p_salary from auths where author_code=p_code;end proc_auths;修改上面存储过程的定义为:代码create or replace procedure
proc_auths( --参数定义了类型长度,将产生编译错误。
p_code in out varchar2, p_salary out number) as begin