版权声明:本文为博主原创文章,未经博主允许欢迎转载,请注明原文链接。一起交流,共同进步。 https://blog.csdn.net/newbie_907486852/article/details/84641425
存储过程:高效率执行
1、存储过程概念及执行
存储过程是存储在数据库服务器端一段或者多段SQL语句的PL/SQL代码块。
创建存储过程:
CREATE PROCEDURE test
AS
BEGIN
DBMS_OUTPUT.put_line('测试存储过程的创建');
END;
PL/SQL窗口执行存储过程:
begin
-- Call the procedure
test;
end;
命令窗口执行存储过程:
EXEC procedure;--procedure是存储过程名
程序中调用存储过程用 call 存储过程名:
hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");//存储过程proc_stuInfo
2、通过USER_SOURCE 视图查看存储过程
SELECT * FROM USER_SOURCE WHERE NAME='TEST' ORDER BY LINE
每个TEXT文本都保存了一段脚本。
3、查看存储过程的错误
在命令行中(TEST存储过程名):
SQL> SHOW ERRORS PROCEDURE FINDEMP
Errors for PROCEDURE SCOTT.FINDEMP:
LINE/COL ERROR
-------- ----------------------------------
4/3 PLS-00428: 在此 SELECT 语句中缺少 INTO 子句
4、无参存储过程
CREATE PROCEDURE findEMP
AS
BEGIN
UPDATE EMP SET DEPTNO=15 WHERE EMPNO=7566;
DBMS_OUTPUT.put_line('成功执行存储过程');
END;
在存储过程中使用游标:
CREATE PROCEDURE findoneEMP AS
CURSOR emp_cur
IS SELECT * FROM EMP; --声明游标
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
OPEN emp_cur; --打开游标
FETCH emp_cur INTO emp_var; --获取游标数据
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
--输出数据
CLOSE emp_cur; --关闭数据
END;
5、有参储存过程
CREATE PROCEDURE getEMP (emp_no IN number)
AS
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
SELECT * INTO emp_var FROM EMP WHERE EMPNO=emp_no;
IF SQL%FOUND THEN
DBMS_OUTPUT.put_line('==========================');
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
END IF;
END;