📜  PL SQL-包(1)

📅  最后修改于: 2023-12-03 15:18:35.881000             🧑  作者: Mango

PL/SQL 包

PL/SQL 包是一种可复用的程序单元,可用于封装相关的功能,并在整个应用程序中共享。

包的组成

PL/SQL 包由两部分组成:规范(specification)和主体(body)。

规范定义了包可见的程序及其参数,但它不包含实际的代码实现。规范的目的是让其他程序能够使用该包中定义的程序。

主体包含了实际的代码实现,可以包括变量、常量和其他子程序。主体中的程序可以访问和修改规范中定义的变量和常量。

创建包

使用以下语法可以创建一个包:

CREATE [OR REPLACE] PACKAGE package_name AS
    -- 此处定义规范
END package_name;
/

CREATE [OR REPLACE] PACKAGE BODY package_name AS
    -- 此处定义主体
END package_name;
/

可以使用 OR REPLACE 关键字来替换现有包,而不是创建一个新的包。

调用包中的程序

要调用包中的程序,可以使用以下语法:

package_name.procedure_name (argument1, argument2, ...);

或者:

package_name.function_name (argument1, argument2, ...);

如果程序返回一个结果,则可以将其存储在变量中,例如:

result := package_name.function_name(argument1, argument2, ...);
实例

下面是一个示例包,该包包含了一个函数和一个过程,可以用于将字符串转换为大写格式。

包规范:

CREATE OR REPLACE PACKAGE string_upper AS
  FUNCTION to_upper(string_in IN VARCHAR2) RETURN VARCHAR2;
  PROCEDURE upper_string(string_in OUT VARCHAR2);
END string_upper;
/

包主体:

CREATE OR REPLACE PACKAGE BODY string_upper AS
  FUNCTION to_upper(string_in IN VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    RETURN UPPER(string_in);
  END to_upper;

  PROCEDURE upper_string(string_in OUT VARCHAR2) IS
  BEGIN
    string_in := UPPER(string_in);
  END upper_string;
END string_upper;
/

使用示例:

DECLARE
  str VARCHAR2(50) := 'hello, world!';
  result VARCHAR2(50);
BEGIN
  result := string_upper.to_upper(str);
  DBMS_OUTPUT.PUT_LINE(result); -- 输出 HELLO, WORLD!

  string_upper.upper_string(str);
  DBMS_OUTPUT.PUT_LINE(str); -- 输出 HELLO, WORLD! 
END;
/