oracle存储过程(mysql不太一样)

了解存储过程

存储过程和函数是一种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;  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值