度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle中的procedure编写和使用详解 [打印本页]

作者: fteair    时间: 2020-2-1 18:01
收藏。。。。。。。
作者: 陈晓龙    时间: 2020-7-21 14:12
标题: oracle中的procedure编写和使用详解
这篇文章主要介绍了oracle中的procedure编写和使用详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下




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

[url=]复制代码[/url] 代码如下:

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编写和使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。



作者: 陈晓龙    时间: 2020-7-21 14:13

作者: 张兴康    时间: 2020-7-23 12:50

作者: 张兴康    时间: 2020-7-23 12:51
学习了




欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2