欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何编写和使用Oracle中的procedure

程序员文章站 2022-07-28 20:01:28
如何编写和使用Oracle中的procedure 1.创建/修改 CREATE [OR REPLACE] PROCEDURE procedure_name [(paramet...
如何编写和使用Oracle中的procedure

1.创建/修改

CREATE [OR REPLACE] PROCEDURE procedure_name

[(parameter_list)]

{IS|AS}

[local_declarations]

BEGIN

executable_statements

[EXCEPTION exception_handlers]

END [procedure_name];

a.parameter_list格式如下

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

游标参数

outcur OUT BASIC_CURSOR:

OPEN outcur FOR SELECT col1,col2 FROM tablename

e.示例

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.调用

[EXECUTE]|[CALL] procedure_name[(parameter,…n)]

在代码块 declare 的 begin/end 中不需要 [EXECUTE]|[CALL], 直接procedure_name[(parameter,…n)]

其他外部程序需要 [EXECUTE]|[CALL]

在PL/SQL中调用这个存储过程,采用了如下的代码:

begin

Proc_Insert('hello6',25,'2005-12-24');

commit;

end;

3.显示调试信息

a.存储过程中在必要的位置添加

DBMS_OUTPUT.put_line ('Hello World!');

b.打开DBMS_OUTPUT

show serveroutput;

set serveroutput on;

c.测试我们的 procedure

复制代码代码如下:

exec procedure_name

3.显示错误 show errors

如果在 exec 存储过程中提示出现错误,时刻使用"show errors"命令查看哪里出错了

4.查看

a.所有 procedure

select object_name,object_type,status from user_objects where OBJECT_TYPE='PROCEDURE';

b.指定 procedure

SELECT text FROM user_source WHERE NAME = 'procedure_name';

5.删除

DROP PROCEDURE procedure_name;