填充Oracle包中查询的变量



我想从oracle包中的查询中填充变量。

在包中我定义:

g_my_value number;
g_my_value2 number;

PROCEDURE initialize_par;

包装内主体:

create or replace PACKAGE BODY my_pkg AS 
PROCEDURE initialize_par AS
BEGIN
Select parameter_value into g_my_value from tbl_parameters where name = 'my_value'; 
Select parameter_value into g_my_value2 from tbl_parameters where name = 'my_value2'; 
END initialize_par;

在这个包的其他过程中使用变量之前,我需要调用执行initialize_par以设置变量中的值。

这是一个好的选择吗?是否可以在没有过程initialize_par的情况下设置变量中的值?

您可以使用过程主体中的BEGIN/END初始化程序块初始化包(无需过程(:

CREATE PACKAGE package_name IS
g_my_value number;
g_my_value2 number;
END;
/
CREATE PACKAGE BODY package_name
IS
BEGIN
Select parameter_value
into   g_my_value
from   tbl_parameters
where  name = 'my_value'; 
Select parameter_value
into   g_my_value2
from   tbl_parameters
where  name = 'my_value2'; 
END;
/

给定样本参数:

CREATE TABLE tbl_parameters (name, parameter_value ) AS
SELECT 'my_value',  42     FROM DUAL UNION ALL
SELECT 'my_value2',  3.141 FROM DUAL;

然后:

BEGIN
DBMS_OUTPUT.PUT_LINE(package_name.g_my_value);
DBMS_OUTPUT.PUT_LINE(package_name.g_my_value2);
END;
/

输出:

42
3.141

小提琴

最新更新