没有合适的资源?快使用搜索试试~ 我知道了~
首页oracle存储过程学习经典[语法+实例+调用]
oracle存储过程学习经典[语法+实例+调用]
需积分: 15 126 浏览量
更新于2023-05-31
评论 1
收藏 144KB DOC 举报
商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程。 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应用程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。
资源详情
资源评论
资源推荐

Oracle 存储过程学习
目录
存储过程学习
存储过程基础知识
存储过程的基本语法
关于 存储过程的若干问题备忘
在 中,数据表别名不能加 。
在存储过程中, 某一字段时,后面必须紧跟 ,如果 整个记录,利用
游标的话就另当别论了。
在利用 语法时,必须先确保数据库中有该条记录,否则会报出
异常。
在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段
会报错
在存储过程中,关于出现 的问题
调用 存储过程
用 调用 存储过程总结
一、 无返回值的存储过程
二、 有返回值的存储过程(非列表)
三、 返回列表
在存储过程中做简单动态查询
一、 本地动态 !
二、 使用 "#$% ! 包
存储过程调用 方法
高效分页存储过程实例 &
Oracle 存储过程基础知识
商业规则和业务逻辑可以通过程序存储在 中,这个程序就是存储过程。
存储过程是 !'(!) !'语句的组合,它使你能将执行商业规则的代码从你的应用
程序中移动到数据库。这样的结果就是,代码存储一次但是能够被多个程序使用。
要创建一个过程对象(*+),必须有 ,-./0.(-,."1-.系统权限。如
果这个过程对象需要被其他的用户 23使用,那么你必须有,-./0./45(-,."1-.权
限。执行*的时候,可能需要 6 权限。或者 .7,10./45(-,."1-.权限。如
果单独赋予权限,如下例所示:
86$5%(-,."1-.9
调用一个存储过程的例子:
6$5%(-,."1-.:;4.(/-/$.0.-;<=

存储过程(PROCEDURE)和函数(FUNCTION)的区别。
> 有返回值,并且可以直接在 9 中引用 > 和或者使用 > 的返回
值。
本质上没有区别'都是(!) !程序'都可以有返回值。最根本的区别是: 存储过程是命
令, 而函数是表达式的一部分。比如:
36:4/$.<?-$
但是不能636:4/$.<如果此时 36 是函数。
PACKAGE 是 > , * , 和 @ 语 句的 组 合 。 *A8 允 许多 个
* 使用同一个变量和游标。
创建 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
}]
@代码:
CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) AS
BEGIN
UPDATE accounts
SET balance = balance + amount
WHERE account_id = acc_no;
END;
可以使用**语句,这个语句的用处在于,你之前赋予的
6 权限都将被保留。
IN, OUT, IN OUT 用来修饰参数。
B4表示这个变量必须被调用者赋值然后传入到 (-,."1-. 进行处理。
10表示 (-,."1-.通过这个变量将值传回给调用者。
B410则是这两种的组合。
authid 代表两种权限:
定义者权限(C82默认),执行者权限(A82)。
定义者权限说明这个 * 中涉及的表,视图等对象所需要的权限只要定义者拥
有权限的话就可以访问。
执行者权限则需要调用这个* 的用户拥有相关表和对象的权限。
Oracle 存储过程的基本语法
1. 基本结构

,-./0.--.(!/,.(-,."1-.存储过程名字
:
参数 B441$#.-'
参数 B441$#.-
</
变量 B40.D.-EF=
变量 "/0.=
#.DB4
.4"存储过程名字
2. SELECT INTO STATEMENT
将 查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条
记录,否则抛出异常:如果没有记录抛出 4%"/0/%?14"<
例子:
#.DB4
.!.,0'变量 '变量 ?-$9*G2666=
.7,.(0B4
H.44%"/0/%?14"0.4
6666=
.4"=
3. IF 判断
B?I%0.0F0.4
#.DB4
328
.4"=
.4"B?=
4. while 循环
HB!.I%0.0F!(
#.DB4
7777
.4"=
.4"!(=
5. 变量赋值
I%0.0EF=
6. 用 for in 使用 cursor
B
,1--B.!.,0J?-$666=
#.DB4
?-%!(
#.DB4
I%1$EF%列名 K%列名
.4"=

.4"!(=
.4"=
7. 带参数的 cursor
,1--,%1.-:,%B"41$#.-<B.!.,04/$.?-$1.-H.-.05(.B"F,%B"=
(.4,%1.-:变量值<=
!(
?.0,,%1.-B40I%4/$.=
.7B0?.0,,%1.-L40?14"=
328
.4"!(=
,!.,%1.-=
8. 用 pl/sql developer debug
连接数据库后建立一个 0HB4"H
在窗口输入调用 ( 的代码'? 开始 8',0-!K4 单步调试
9. Pl/Sql 中执行存储过程
在 @J* 中:
MM必要的变量声明,视你的过程而定
8
69*:*3'*3'<=
)
: :在 !)(!1中调用存储过程,显示结果:
SQL>set serveoutput on --
打开输出
SQL>var info1 number; --
输出
1
SQL>var info2 number; --
输出
2
SQL>declare
var1 varchar2(20); --
输入
1
var2 varchar2(20); --
输入
2
var3 varchar2(20); --
输入
2
BEGIN
pro(var1,var2,var3,:info1,:info2);
END;
/
SQL>print info1;
SQL>print info2;
注:在 EXECUTE IMMEDIATE0- 语句是 !(!1 中动态执行语句,它在执行中会自动
提交,类似于 "( 中 ?-$%""! 语句,在此语句中 是不能换行的'只能通过连接字符NN,
或着在在换行时加上M连接字符。
关于 Oracle 存储过程的若干问题备忘
剩余18页未读,继续阅读










安全验证
文档复制为VIP权益,开通VIP直接复制

评论0