Oracle存储过程学习

本文介绍Oracle存储过程的基础知识,包括创建存储过程的语法、参数类型(IN、OUT、INOUT)及权限(authid)设置。此外,还详细讲解了如何使用变量存储SELECT查询结果以及处理异常情况,最后探讨了游标的使用方法。
摘要由CSDN通过智能技术生成

工作中遇到了Oracle的存储过程,学习下Oracle存储过程

创建procedure基本语句:

CREATE [ OR REPLACE ] PROCEDURE [ schema.]procedure
[(argument [IN | OUT | IN OUT ] [NO COPY] datatype
[, argument [IN | OUT | IN OUT ] [NO COPY] datatype]...
)]
[ authid { current_user | definer }] 
{ is | as } { pl/sql_subprogram_body | 
language { java name 'String' | c [ name, name] library lib_name
}]
其中,IN,OUT,IN OUT用来修饰参数

IN表示这个变量必须被调用者赋值然后进行处理

OUT表示通过这个变量将值返回给调用者

IN OUT是两者的组合

authid代表两种权限:

定义者权限,执行者权限。

定义者权限表示这个procedure涉及的表,视图等对象所需要的权限只要定义者拥有权限的话就可以访问。

执行者权限表示需要调用这个procedure的用户要拥有相关表和对象的权限。

oracle存储过程的基本结构:

CREATE OR REPLACE PROCEDURE 存储过程名字
(
参数1 IN NUMBER,
参数2 IN NUMBER
) AS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
......
END 存储过程名字


将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)

BEGIN
    SELECT CUST_TYPE INTO v_cust_type FROM tablename WHERE 条件;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            ......
        WHEN OTHERS THEN
            ......
END;

注:在存储过程中,select某一个字段时,后面必须紧跟into。

在利用select ... into ...时,必须先确保数据中有该条记录,否则会报no data found异常。


关于游标

显式游标的定义:CURSOR cursor_name IS select_statement

例如:

CURSOR cur_post_info
        IS
        SELECT A.参数,B.参数
        FROM tablename A,tablename B
        WHERE 条件 ;

OPEN cur_post_info;--打开游标

--循环游标

LOOP FETCH cur_post_info INTO  参数1,参数2

EXIT WHEN cur_post_info%NOTFOUND;--当没有记录时推出循环

......

END LOOP;
CLOSE cur_post_info;


有显式游标相应的就有隐式游标,隐式游标的好处就是不需要手动关闭,在这里不做介绍了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值