PL/SQL有以下3种存储过程:
-
过程:一种基本的存储过程,由过程名、参数和程序体组成。
-
函数:与过程类似,只是函数有返回值。
-
程序包:一组相关的PL/SQL过程和函数,由包名、说明部分和包体组成
过程
创建过程:
CREATE [ OR REPLACE ] PROCEDURE 过程名
[ (参数列表…) ] IS | AS
[ 局部变量声明 ]
BEGIN
<过程体>
END [ 过程名 ];
参数声明的格式 :
参数名 [IN | OUT | IN OUT] 数据类型 [ := 初始值 ]
IN参数类型表示此参数接受过程外传递来的值;
OUT参数类型表示此参数将在过程中被赋值,并传递到过程体外;
IN OUT参数类型表示此参数同时具备IN和OUT参数型的特性。
示例:
CREATE OR REPLACE PROCEDURE UserMan.ResetPwd
( v_UserId IN NUMBER)
AS
BEGIN
UPDATE UserMan.Users SET UserPwd = '111111'
WHERE UserId = v_UserId;
END;
执行:
EXECUTE UserMan.ResetPwd (1);
删除过程 :
DROP PROCEDURE [方案名.]过程名
函数
创建函数:
函数必须有返回值
CREATE [ OR REPLACE ] FUNCTION 函数名
[ (参数列表) ]
RETURN 函数数据类型 IS | AS
[ 局部变量声明 ]
BEGIN
过程体
RETURN 函数值
END [ 函数名 ];
示例:
CREATE FUNCTION UserMan.GetPwd
( v_name IN Users.UserName%Type )
RETURN Users.UserPwd%Type
AS
outpwd Users.UserPwd%Type;
BEGIN
SELECT UserPwd INTO outpwd FROM Users
WHERE UserName=''||v_name||'';
RETURN outpwd;
END;
调用函数 :
[方案名.]过程名
varPwd:= USERMAN.GetPwd('Admin');
删除函数
DROP FUNCTION USERMAN.GetPwd;
程序包
PL/SQL程序包是由包规范部分和包体组成的。可以使用CREATE PACKAGE语句来创建包的说明部分,它的基本语法结构如下:
CREATE [ OR REPLACE ] PACKAGE 程序包名
IS | AS
[ 声明部分 ]
END [ 程序包名 ];
声明部分可以包括类型、变量、过程、函数和游标的说明。
CREATE OR REPLACE PACKAGE UserMan.MyPack
IS
PROCEDURE ResetPwd
( v_UserId IN NUMBER);
FUNCTION GetPwd
( v_name IN UserMan.Users.UserName%Type )
RETURN UserMan.Users.UserPwd%Type;
END MyPack;
程序包体:
CREATE PACKAGE BODY 程序包名
IS | AS
[ 声明部分 ]
[ 过程体 ]
[ 函数体 ]
[ 初始化部分 ]
END [ 程序包名 ];
示例:
CREATE PACKAGE BODY UserMan.MyPack
IS
PROCEDURE ResetPwd
( v_UserId IN NUMBER)
AS
BEGIN
UPDATE UserMan.Users SET UserPwd = '111111' WHERE UserId = v_UserId;
END;
FUNCTION GetPwd
( v_name IN UserMan.Users.UserName%Type )
RETURN UserMan.Users.UserPwd%Type
AS
outpwd UserMan.Users.UserPwd%Type;
BEGIN
SELECT UserPwd INTO outpwd FROM UserMan.Users
WHERE UserName=''||v_name||'';
RETURN outpwd;
END;
END MyPack;
调用程序包 :
调用程序包中的过程:方案名.程序包名.过程名
调用程序包中的函数:方案名.程序包名.函数名
删除
删除程序包体:DROP PACKAGE BODY 方案名.程序包名;
删除程序包:DROP PACKAGE 方案名.程序包名;