📅  最后修改于: 2023-12-03 15:18:35.881000             🧑  作者: Mango
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;
/