1.创建/修改
1
2
3
4
5
6
7
8
|
CREATE [ OR REPLACE ] PROCEDURE procedure_name [(parameter_list)] { IS | AS } [local_declarations] BEGIN executable_statements [EXCEPTION exception_handlers] END [procedure_name]; |
a.parameter_list格式如下
1
|
parameter_name1 [ in | out | in out ] type, parameter_name1 [ in | out ] type [,........] |
in 是输入参数, 可以有默认值,默认值例子 emp_no in number:=7900
out 是输出参数,
b.AS/IS的区别
在视图(VIEW)中只能用AS不能用IS
在游标(CURSOR)中只能用IS不能用AS
c.local_declarations格式如下:
loacal_var1 type(limit);
如empname varchar2(20);
d.输出变量赋值
oracle 变量赋值有两种一种是直接 := 还有就是 select into
游标参数
1
2
|
outcur OUT BASIC_CURSOR: OPEN outcur FOR SELECT col1,col2 FROM tablename |
e.示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
create or replace procedure putNum(P_Date in date , P_year out varchar2) is v_num number(8) := 1; v_days number; v_date date ; begin dbms_output.put_line( 'intput value:' || P_year); v_num := 1; v_days := 1; v_days := to_number(to_char(P_Date, 'dd' )); -- to_char(sysdate-20,'dd') for i in 1 .. v_days Loop v_date := to_date( '2011/11/' || to_char(i), 'yyyy/MM/dd' ); --dbms_output.put_line(v_date); end loop; P_year := '2012' ; end ; |
2.调用
1
|
[ EXECUTE ]|[CALL] procedure_name[(parameter,…n)] |
在代码块 declare 的 begin/end 中不需要 [EXECUTE]|[CALL], 直接 procedure_name[(parameter,…n)]
其他外部程序需要 [EXECUTE]|[CALL]
在PL/SQL中调用这个存储过程,采用了如下的代码:
1
2
3
4
|
begin Proc_Insert( 'hello6' ,25, '2005-12-24' ); commit ; end ; |
3.显示调试信息
a.存储过程中在必要的位置添加
1
|
DBMS_OUTPUT.put_line ( 'Hello World!' ); |
b.打开DBMS_OUTPUT
1
2
|
show serveroutput; set serveroutput on ; |
c.测试我们的 procedure
exec procedure_name
3.显示错误 show errors
如果在 exec 存储过程中提示出现错误,时刻使用"show errors"命令查看哪里出错了
4.查看
a.所有 procedure
1
|
select object_name,object_type,status from user_objects where OBJECT_TYPE= 'PROCEDURE' ; |
b.指定 procedure
1
|
SELECT text FROM user_source WHERE NAME = 'procedure_name' ; |
5.删除
1
|
DROP PROCEDURE procedure_name; |
以上所述是小编给大家介绍的oracle中的procedure编写和使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.sina.com.cn/s/blog_ad0672d60102vv61.html