Oracle(八)存储过程

本文介绍了Oracle中的三种PL/SQL组件:过程、函数和程序包。过程是基本的存储过程,包含参数和程序体;函数与过程相似,但有返回值;程序包则是一组相关的过程和函数的集合,提供了更高级的组织和封装。内容涵盖创建、执行、删除这些组件的方法,以及如何调用程序包中的成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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 方案名.程序包名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值