Oracle存储过程
ORACLE 存储过程语法
CREATE [OR REPLACE] PROCEDURE [schema.] procedure_name
[parameter_name] [[IN] datatype [{:=|DEFAULT} expression]
| {OUT | IN OUT} [NOCOPY] datatype][,...]{IS | AS} BODY;
执行无参数的存储过程
EXEC procedure_name;
执行有参数的存储过程
EXEC procedure_name(parameters);
如果存储过程中有输出语句,需要设置SERVEROUTPUT的输出状态
SHOW SERVEROUTPUT -- 查看
SET SERVEROUTPUT ON -- 开启
创建无参数的存储过程
-
修改READERINFO2表中BOOKCOUNT的数据,为计算机系可借书的数目增加1
CREATE PROCEDURE PRO_READER
AS
BEGIN
UPDATE READERINFO2 SET BOOKCOUNT = BOOKCOUNT+1
WHERE UNIT = '计算机系';
END;
在存储过程中使用游标
- 搜索READERINFO2表中所有自动化系和生物系的数据,并判断当借书的数据(BOOKCOUNT)小于3时,为其增加1
CREATE PROCEDURE PRO_READER_COT
AS
v_readerinfo READERINFO2%ROWTYPE;-- 声明标变量v_readerinfo,其数据类型为READERINFO2行记录类型
-- 也可声明为列类型 READERINFO2.bookcount%TYPE
CURSOR cursor_readerinfo
IS
SELECT *
FROM READERINFO2
WHER UNIT IN('自动化系','生物系')
ORDER BY UNIT;-- 表示声明创建游标cursor_readerinfo
BEGIN
OPE cursor_readerinfo; --打开游标
LOOP
FETCH cursor_readerinfo INTO v_readerinfo; -- 从游标中提取指针指向当前行数据,并存入标量v_readerinfo
EXIT WHEN cursor_readerinfo%NOTFOUND; -- 表示进行判断,当游标指针到尾部时,将结束循环
IF v_readerinfo.bookcount < 3 THEN
UPDATE READERINFO2 SET BOOKCOUNT = BOOKCOUNT+1
WHERE READERID = v_readerinfo.readerid;
END IF;
END LOOP;
END;