了解存储过程
存储过程和函数是一种PL/SQL块,更多的是被称为有名sql块,因为我们一般写的sql都是没有名称的,即无名sql块。
存储过程的优点:
1、一般的sql都是被保存在本地的,所以只能本地操作;存储过程是将写好编译成功的sql块当做一个对象存在数据库中,所以只要成功登录了数据库,就可以直接调用、编辑这个sql存储过程。
2、安全保证,只有创建或者被授权者才能调用、编辑这个存储过程。
3、存储过程是被写入数据字典的,就像是一个写好的共用代码块放在数据库中,可以被其他的pl/sql程序或者存储过程调用,是一种可以称为被重复调用的工具代码。
4、存储过程是可以有参数的传入和返回值,但是返回值必须通过参数带回,
5、存储过程是需要提前通过编译的,从而可以提前将语法错误排除,杜绝在程序使用时出现语法错误的低端错误。
存储过程语法格式:
创建一个存储过程:
CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)]
{AS|IS}
[说明部分]
BEGIN
可执行部分
[EXCEPTION 错误处理部分]
END [过程名];
OR REPLACE 是oracle数据库用来对已有的存储过程就行替换,避免存储名已存在的错误。(oracle采用的是存在即替换,sql中采取的是先删除这个名称的存储过程,在创建---DROP PROCEDURE IF EXISTS `存储过程名`;CREATE PROCEDURE 存储过程名)
参数
in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。
out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程。
in out 表示高参数可以向该过程中传递值,也可以将某个值传出去。
AS/IS 在存储过程中两者没什么区别
删除一个存储过程:
DROP PROCEDURE 存储过程名;
重新编译一个存储过程:
ALTER PROCEDURE 存储过程名 COMPILE;(重新编译,必须是要是创建者或者被授权者)
创建和执行实力演示:
创建存储过程:
1、直接写在sql编辑区
CREATE OR REPLACE PROCEDURE sys111
AS
V_TOTAL NUMBER(10);
BEGIN
SELECT COUNT(*) INTO V_TOTAL FROM TEST_USER1;
DBMS_OUTPUT.PUT_LINE('用户人数为:'|| V_TOTAL);
END;
2、执行完在右侧项目中的procedures中找到sys111,如果没有画×则编译通过,否则编译不通过,修改后继续执行直到编译通过
3、在sql窗口执行存储过程
---sql窗口
begin
sys111();
end;
---sql窗口
call sys111();
---命令窗口
sql>set serveroutput on;
sql>execute sys111();
4、执行结果:用户总人数:3
5、如果是SCOTT用户给另一个用户授权存储过程权限:
GRANT EXECUTE ON sys111 TO STUDENT ;
用student用户登录在sql窗口操作:
SET SERVEROUTPUT ON
BEGIN
SCOTT.sys111;
END;