plsql 函数与过程的定义及应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档