教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

Oracle数据库_入门教程(二)_子程序(存储过程和函数)

来源:网络收集 时间:2026-06-22
导读: Oracle数据库 入门教程(二) 子程序(存储过程和函数) 子程序 是已经命名的PLSQL块,他们存储在数据库中,可以为他们指定参数,可以在客户端和 应用程序中调用它们。 子程序包括 存储过程 和 函数,程序包 是存储过程和 函数的集合。 存储过程--语法: CREATE

Oracle数据库 入门教程(二) 子程序(存储过程和函数)
子程序 是已经命名的PLSQL块,他们存储在数据库中,可以为他们指定参数,可以在客户端和
应用程序中调用它们。
子程序包括 存储过程 和 函数,程序包 是存储过程和 函数的集合。

存储过程--语法:
CREATE [OR REPLACE] PROCEDURE procedure_name//名字
[(parameter_list)]//参数列表
{IS|AS}
[local_declarations]//局部声明变量
BEGIN
executable_statements//执行SQL语句
[EXCEPTION
exception_handlers]//异常处理
END [procedure_name];

语法说明:
procedure_name 是过程名字
parameter_list 是参数列表
local_declarations 是局部声明
executable_statements 是可执行语句,
execption_handlers是 异常处理程序

-------
create or replace procedure wyd_print(times number)
is
i number :=0;
begin
loop
i :=i+1;

DBMS_OUTPUT.PUT_LINE('第'||i||'次 循环!!');

exit when i>= times;

end loop;
end;
/

直接调用存储过程:
exec wyd_print(20)
execute wyd_print(30);


过程参数模式

调用程序是通过参数向被调用的过程传递值的。
参数传递的模式有3种:IN ,OUT ,IN OUT 。也就是输入,输出,输入 输出

定义过程参数的语法:
parameter_name [IN |OUT |IN OUT] datatype [{:=| DEFAULT} expression]

参数IN模式 是默认模式
如果要指定OUT | IN OUT 模式参数 要 明确指定

---------
实例:
CREATE OR REPLACE PROCEDURE mypar(a IN number,b OUT number,c IN OUT number)
IS

BEGIN
DBMS_OUTPUT.PUT_LINE('a -->'||a);
DBMS_OUTPUT.PUT_LINE('b -->'||b);
DBMS_OUTPUT.PUT_LINE('c -->'||c);

--a:=111;
b:=222;
c:=333;

DBMS_OUTPUT.PUT_LINE('a -->'||a);
DBMS_OUTPUT.PUT_LINE('b -->'||b);
DBMS_OUTPUT.PUT_LINE('c -->'||c);

END mypar;
/
-----

declare

aa number:=11;
bb number:=22;
cc number:=33;
begin
DBMS_OUTPUT.PUT_LINE('before aa -->'||aa);
DBMS_OUTPUT.PUT_LINE('before bb -->'||bb);
DBMS_OUTPUT.PUT_LINE('before cc -->'||cc);
mypar(aa,88,cc);
DBMS_OUTPUT.PUT_LINE('after aa -->'||aa);
DBMS_OUTPUT.PUT_LINE('after bb -->'||bb);
DBMS_OUTPUT.PUT_LINE('after cc -->'||cc);

end;
/

注意几点:
(1)IN类型参数 在 过程中不能 再给赋值
(2)OUT INOUT 类型 可以进入后赋值。
(3)OUT 类型参数在调用过程传入参数时无效,
(4)OUT ,IN OUT 类型参数 在调用过程时传入的必须是变量

---------
一个过程创建了,将执行权限授予其他用户

语法:
GRANT EXECUTE ON procedure_name TO USER_Name; //授权给特定用户执行过程的权限
GRANT EXECUTE ON procedure_name TO public ; //授权给所有数据库用户执行过程的权限

查看数据库里面的存储过程:
select object_name from user_objects where object_type='PROCEDURE';

select s
ubstr(object_name,1,20) object_name,object_type from user_objects where object_type='PROCEDURE';

select substr(object_name,1,10) object_name,

object_type from user_objects;
删除一个过程:

DROP procedure procedure_name;


____________________________________________________________________

_______________ 函数的 定义 和 使用 ____________________

____________________________________________________________________

函数与过程相似,也是数据库中存储的已经命名的PL/SQL块。
函数的主要特性:
(1)必须有一个返回值
(2)函数不能单独执行,只能通过SQL语句 或者PL/SQL程序块来调用。

函数定义 -- 语法:
CREATE [OR REPLACE] FUNCTION function_name
[(parameter1,parameter2...)]
RETURN datatype
{IS|AS}
[local_declarations]
BEGIN
Exexutable_Statements;
[EXCEPTION
Exception_handlers;]
END;
/
注意:
(1)函数只能带有 IN 参数,而不能带有 IN OUT 或 OUT 参数。
(2)形式参数必须只能使用数据库类型,不能使用PL/SQL类型。
(3)函数返回类型也必须是数据库类型。
--------------
创建一个函数:
create or replace function fun_sum(a number,b number)
return number
IS
BEGIN
return a+b;
END;

--------------

通过SQL来执行函数:

SELECT function_name[(parameter1,parameter2...)] FROM DUAL;

select fun_sum(5,6) from dual;

--------------

查看数据库里面的用户创建的函数:
select object_name from user_objects where object_type='FUNCTION';

select substr(object_name,1,20) object_name,object_type from user_objects where object_type='FUNCTION';

--------------
函数的授权:

GRANT EXECUTE ON function_name TO USER_Name; //函数的使用权授予特定的用户

GRANT EXECUTE ON function_name TO public; //函数的使用权授予数据库中所有用户

example:
GRANT EXECUTE ON fun_sum to public;

--------------

*** 自主事务处理

自主事务处理 是有另一个事务处理(主事务处理) 启动的独立事务处理。

举例:
//P1就是 自主事务处理
CREATE OR REPLACE PROCEDURE p1
AS
PRAGMA AUTONOMOUS_TRANSACTION; --就这句话,让事务处理独立开来了
BEGIN
END p1;
/

CREATE OR REPLACE PROCEDURE p2
AS
BEGIN
...
p1;
...
END p2;
/
p2 过程 调用 了P1 过程,但是 p1过程声明了事务独立,
使得p1的运行对p2没有直接影响。


删除一个函数:
语法:
DROP FUNCTION Function_name;

Example:
drop FUNCTION fun_sum;

----------------------------------------------------------------
****************** 程序包 的创建 和使用 ****************
----------------------------------------------------------------
程序包是一种数据库对象,它是对相关PL/SQL类型,子程序,游标,异常,变量
和常量的封装。

创建一个程序包 有两个步骤:
(1) 创建 程序包规范。(也可以说成是 ‘声明程序包’)

…… 此处隐藏:3597字,全部文档内容请下载后查看。喜欢就下载吧 ……

Oracle数据库_入门教程(二)_子程序(存储过程和函数).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2176979.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)