Skip to content

概述

PL/SQL子程序是一个带命名的过程或函数,可以重复调用。使用 PL/SQL子程序可以将程序模块化管理,并且能够减少网络开销,提高性能。

包头中声明并在包体中定义子程序,该子程序为包的子程序,存储在数据库中,直到包被删除。

示例

包的子程序

在模式级别使用 CREATE FUNCTION 或者CREATE PROCEDURE 语句创建的子程序是一个独立子程序,可以分为存储过程和存储函数。独立子程序存储在数据库中,直到该存储过程和存储函数被删除。

sql
--创建包头
CREATE OR REPLACE PACKAGE pack_1
AS
  PROCEDURE pro_1(c1 INT,c2 VARCHAR2);       -- 在包头中声明子程序
  FUNCTION func_1(c1 INT,c2 VARCHAR2) RETURN INT; -- 在包头中声明子程序
END;

--创建包体
CREATE OR REPLACE PACKAGE BODY pack_1
AS
  PROCEDURE pro_1(c1 INT,c2 VARCHAR2)        -- 在包体中定义子程序
  AS
  id INT;
  name VARCHAR2;
  BEGIN
    name:=c2;
    SEND_MSG('c2='||name);
  END pro_1;
  FUNCTION func_1(c1 INT,c2 VARCHAR2) RETURN INT  -- 在包体中定义子程序
  AS
  id INT;
  name VARCHAR2;
  BEGIN
    id:=c1;
    RETURN id;
  END func_1;
END pack_1;
/

存储过程

sql
CREATE OR REPLACE PROCEDURE pro_1(id INT,name INT)
AS       -- 声明区开始
	v1 INT;
BEGIN      -- 声明区开始
  v1:=1;   -- 执行语句
END pro_1;  -- 声明区结束
/

存储函数

sql
CREATE OR REPLACE FUNCTION func_1(id INT,name INT) RETURN INT
AS       -- 声明区开始
	v1 INT;
BEGIN      -- 声明区开始
  v1:=1;   -- 执行语句
  RETURN v1;
END func_1;  -- 声明区结束
/