存储过程的编写.doc
文本预览下载声明
存储过程的编写
前面我们讲解PL/SQL块的例子不是存储过程,每次都要把所有代码执行一遍,这样很不方便,接下来我们开始引入存储过程。Oracle存储过程是pl/sql语句的预编译集合。
使用存储过程的优势:
(1)允许模块化程序设计
(2)执行高效
(3)减少网络流量
Oracle提供三种存储过程
过程:由过程名、参数和程序体组成。
函数:与过程类似,只是函数有返回值。
程序包:一组相关的过程和函数,由包名,包头和包体组成。
1、存储过程的编写格式
基本结构 PROCEDURE?Name?[(Parameter[,Parameter,])]IS|AS??[Local?Declarations]BEGIN??Execute?statements;??[EXCEPTION?Exception?Handlers]END?[Name];
举例
CREATE OR REPLACE PROCEDURE prc_a_modify_aab004 (prm_aab001 IN VARCHAR2,
prm_aab004_new IN VARCHAR2,
prm_aab004_old OUT VARCHAR2,
prm_AppCode OUT NUMBER,
prm_ErrorMsg OUT VARCHAR2)
IS
CURSOR cur_t_ab01_aab004
IS
SELECT aab004
FROM t_ab01
WHERE aab001 = prm_aab001 and rownum = 1;
begin
prm_AppCode := 1;
OPEN cur_t_ab01_aab004;
LOOP
FETCH cur_t_ab01_aab004 INTO prm_aab004_old;
EXIT WHEN cur_t_ab01_aab004%NOTFOUND;
END LOOP;
CLOSE cur_t_ab01_aab004;
IF prm_aab004_old IS NULL THEN
prm_AppCode := -1;
prm_ErrorMsg := 没有找到单位编号为||prm_aab001||的单位!;
else
UPDATE t_ab01
SET aab004 = prm_aab004_new
WHERE aab001 = prm_aab001;
END IF;
EXCEPTION
WHEN OTHERS THEN
prm_AppCode := -1;
prm_ErrorMsg := 更新单位名称失败!;
END prc_a_modify_aab004;
/
2、执行存储过程
2.1在块中执行过程
SET SERVEROUTPUT ON
DECLARE
v_aab001 varchar2(20);
v_aab004 varchar2(100);
v_old_aab004 varchar2(100);
n_appcode number;
v_errmsg varchar2(100);
BEGIN
v_aab001:
v_aab004:=天津肯德基店_2015;
prc_a_modify_aab004(v_aab001,v_aab004,v_old_aab004,n_appcode,v_errmsg);
DBMS_OUTPUT.PUT_LINE(原单位名称:||v_old_aab004);
DBMS_OUTPUT.PUT_LINE(返回值:||n_appcode);
DBMS_OUTPUT.PUT_LINE(返回信息:||v_errmsg);
END;
/
Commit;
2.2在pl/sql开发环境中执行存
显示全部