oracle怎么写存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么写存储过程相关的知识,希望对你有一定的参考价值。

越详细越好!谢谢

参考技术A 给你示例你参考下:
----------------------------建立存储过程:
CREATE OR REPLACE PROCEDURE P_name--存储过程名字
(
i_var in int, --输入参数1
o_var OUT varchar2 --输出参数1
)
IS
v_STR VARCHAR2(200); --定义存储过程内部的局部变量

BEGIN
--下面是存储过程的主体实现部分
v_STR := i_var;
dbms_output.put_line(v_STR);
o_var := v_STR;
exception--错误异常处理部分
when others then
dbms_output.put_line(sqlerrm);--打印错误信息
END P_name;

-----------------------------------调用存储过程示例:
declare
v_in int;
v_out varchar2(50);
begin
v_in :=100;
P_name (v_in,v_out); --调用存储过程P_name
dbms_output.put_line('存储过程输入结果为:'||v_out);
exception--错误异常处理部分
when others then
dbms_output.put_line(sqlerrm);--打印错误信息
end;本回答被提问者采纳
参考技术B 你首先要了解存储过程包括哪些模块,哪些是必备的,哪些是可选的.
另外呢,如果有条件的话,最好能找一些模板看看别人是怎么写的,再结合你们公司的实际情况,做一些适当的调整.
例如create or replace procedure +过程名字(变量名 in,数据类型,变量名 out 数据类型)等
declare
变量 类型
begin
过程体
exception
end

最好有些实例,可以先模仿着写一写
等熟练之后呢,再自己按照自己的思路去写
参考技术C create or replace procedure A(
a in varchar,
b in varchar

) is
c number := 0;
begin

---具体内容
commit;
end A;

oracle中的存储过程怎么写

参考技术A Oracle存储过程写法实例

总结项目中写的存储过程例子:
Oracle存储过程基本语法 存储过程
  1 CREATE OR REPLACE PROCEDURE 存储过程名
  2 IS/AS
  3 BEGIN
  4 NULL;
  5 EXCEIPTION;
  6 END;

1、创建存储过程,后面可用is或者as:
create or replace procedure PRO_COMPLAIN_TEMPLATE as

2、定义变量,此处用到了%TYPE和%ROWTYPE,参考 /database/201211/168564.html ,另外定义了一个游标,TEM_INSTANCE TEMPLATE_CUR%ROWTYPE这个类型定义必须要在游标定义之后:
NEED_DO_FOR_ZL INTEGER;
CURRENT_MAX_ID MEMO_TEMPLET.TEMPLET_ID%TYPE;
CURSOR TEMPLATE_CUR IS SELECT TEMPLET_NAME, TEMPLET_CONTENT FROM SYS_COMPLAINT_TEMPLET;
TEM_INSTANCE TEMPLATE_CUR%ROWTYPE;
3、begin开始块:
begin

4、该插入语句使用了DBLINK,还有使用DBMS_OUTPUT.put_line('打印信息')进行信息输出:
insert into MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT, TEMPLET_TYPE, TEMPLET_MEMO) (SELECT * FROM MEMO_TEMPLET@COMPANY);

SELECT COUNT(*) INTO NEED_DO_FOR_ZL FROM SYS_COMPLAINT_TEMPLET;
IF(NEED_DO_FOR_ZL > 0) THEN
DBMS_OUTPUT.put_line('打印信息');
SELECT MAX(TEMPLET_ID)+1 INTO CURRENT_MAX_ID FROM MEMO_TEMPLET;
DBMS_OUTPUT.put_line('MEMO_TEMPLET最大ID' || CURRENT_MAX_ID);
FOR TEM_INSTANCE IN TEMPLATE_CUR LOOP
INSERT INTO MEMO_TEMPLET (TEMPLET_ID, TEMPLET_CONTENT,
TEMPLET_TYPE, TEMPLET_MEMO) VALUES (CURRENT_MAX_ID,
TEM_INSTANCE.TEMPLET_CONTENT, '7', NULL);
CURRENT_MAX_ID := CURRENT_MAX_ID + 1;
DBMS_OUTPUT.put_line(TEM_INSTANCE.TEMPLET_CONTENT);
END LOOP;
END IF;
COMMIT;
www.2cto.com
4、exception块,使用WHEN OTHERS THEN,其中用raise可显示错误信息:
exception
WHEN OTHERS THEN
DBMS_OUTPUT.put_line('sqlcode : ' ||sqlcode);
raise;
ROLLBACK;
IF TEMPLATE_CUR%ISOPEN THEN
CLOSE TEMPLATE_CUR;
END IF;
DBMS_OUTPUT.put_line('打印信息');
end;

注:关于游标的使用,如果像本例中使用for循环去遍历游标的话则不需要显式的去用open/close
cursor打开和关闭游标,此处会自己处理,如果使用fetch
into的话就需要显式开关游标,另外任意执行一个update操作,用隐式游标sql的属性%found,%notfound,%rowcount,%isopen观察update语句的执行情况,也可以使用来判断游标状态,如IF
TEMPLATE_CUR%ISOPEN THEN。

以上是关于oracle怎么写存储过程的主要内容,如果未能解决你的问题,请参考以下文章

oracle的存储过程怎么写?

oracle存储过程怎么写循环

oracle怎么写存储过程?

Oracle数据库的存储过程怎么写?

Oracle存储过程游标for循环怎么写

oracle 存储过程两个for循环 怎么写