|
存储过程
存储过程可以有多个或者零个输入输出参数,但通常没有返回值。存储过程是已经编译好的代码,所以执行效率非常高
存储过程创建语句
- create [or replace] procedure 存储过程名 [(输入、输出参数、in/out模式参数)]
- is/as
- begin
- sentences;
- [exception
- sentences;]
- end 存储过程名;
复制代码 一个没有参数的存储过程
- create or replace procedure pro_no_par is
- begin
- update employees set salary=salary+100 where employee_id=100;
- commit;
- dbms_output.put_line('工资已经调整!!');
- end pro_no_par;
- --执行,使用execute
- execute pro_no_par;
复制代码 执行结果:
- 匿名块已完成
- 工资已经调整!!
- 执行使用匿名块
- begin
- pro_no_par;
- end;
- 匿名块已完成
- 工资已经调整!!
复制代码 一个带in模式参数的存储过程
参数的方式有三种:指定名称传递;按位置传递;混合方式传递
注意混合方式传递从使用【指定名称传递】的位置开始,后面的参数必须使用【指定名称传递】
- create or replace procedure pro_in_par
- ( var_1 in nvarchar2,
- var_2 in number) is
- begin
- update employees set salary=salary+var_2 where first_name=var_1;
- commit;
- dbms_output.put_line(var_1||'的工资已经增加了'||var_2||'!');
- end pro_in_par;
- --执行
- execute pro_in_par('Steven',100);
复制代码 执行结果:
- 匿名块已完成
- Steven的工资已经增加了100!
- execute pro_in_par(var_1=>'Steven',var_2=>100);
- 匿名块已完成
- Steven的工资已经增加了100!
- execute pro_in_par('Steven',var_2=>100);
- 匿名块已完成
- Steven的工资已经增加了100!
复制代码- --举例混合参数输入,后面的参数没有使用【指定名称传递】
- execute pro_in_par(var_1=>'Steven',100);
- 在行 42 上开始执行命令时出错:
- execute pro_in_par(var_1=>'Steven',100)
- 错误报告:
- ORA-06550: 第 1 行, 第 34 列:
- PLS-00312: 一个定位相关参数没有说明其相关性
- ORA-06550: 第 1 行, 第 7 列:
- PL/SQL: Statement ignored
- 06550. 00000 - "line %s, column %s:\n%s"
- *Cause: Usually a PL/SQL compilation error.
- *Action:
复制代码 一个带out模式和in out模式参数存储过程
- create procedure pro_out_par
- ( var_1 in out number,
- var_2 out employees.first_name%type,
- var_3 out employees.phone_number%type) is
- begin
- select first_name,phone_number into var_2,var_3 from employees where employee_id=var_1;
- end pro_out_par;
- --执行
- declare
- ex_var_1 number;
- ex_var_2 employees.first_name%type;
- ex_var_3 employees.phone_number%type;
- begin
- ex_var_1:=102;
- pro_out_par(ex_var_1,ex_var_2,ex_var_3);
- dbms_output.put_line('员工号为'||ex_var_1||'的员工姓名是;'||ex_var_2||',联系电话是:'||ex_var_3);
- end;
复制代码- 匿名块已完成
- 员工号为102的员工姓名是;Lex,联系电话是:515.123.4569
复制代码
|
|