在 oracle 包规范中创建类似字典的值集合
creating a dictionary-like collection of values in an oracle package spec
假设我有一个包装规格。存储常量值,这些值在其他包(主要是它们的过程)中广泛使用 - 所以像自定义错误消息,特定值,甚至像
这样的列表
TYPE myTableType IS TABLE OF VARCHAR2(100);
myObj mytype := NEW myTableType ('value1','value2')
不过,我现在想向其中添加一个完整的 "dictionary" 结构 - 因此该包中的键-> 值对列表。
似乎我无法初始化该部分中的 table 条记录,正如此处已经询问的那样:
https://asktom.oracle.com/pls/asktom/f?p=100:11%3A0%3A%3A%3A%3AP11_QUESTION_ID:14334298866128
link 中提到的 table 个对象似乎也不是我的解决方案。不确定什么是某种最佳解决方法。
有什么想法吗?
给定包规格
CREATE OR REPLACE PACKAGE example IS
TYPE assoc_array_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);
g_const_array assoc_array_type;
PROCEDURE dummy_proc (i_var NUMBER);
END example;
/
您可以按如下方式初始化关联常量数组
CREATE OR REPLACE PACKAGE BODY example IS
PROCEDURE dummy_proc (i_var NUMBER) IS
BEGIN
dbms_output.put_line(g_const_array('key_1'));
END dummy_proc;
BEGIN
g_const_array('key_1') := 'value_1';
g_const_array('key_2') := 'value_2';
g_const_array('key_3') := 'value_3';
END example;
/
为了测试,编译 spec 和 body,然后调用 dummy_proc,这将在控制台打印 value_1
。关联数组也可以根据不同的需要用binary_integer或pls_integer索引
编辑:第二个包显示您可以引用 public 数组并从其他包的初始化中获取值。
CREATE OR REPLACE PACKAGE example_2 IS
PROCEDURE dummy_proc (i_key VARCHAR2);
END example_2;
/
CREATE OR REPLACE PACKAGE BODY example_2 IS
PROCEDURE dummy_proc (i_key VARCHAR2) IS
BEGIN
dbms_output.put_line(example.g_const_array(i_key));
END dummy_proc;
END example_2;
/
BEGIN
example_2.dummy_proc('key_1');
END;
/
假设我有一个包装规格。存储常量值,这些值在其他包(主要是它们的过程)中广泛使用 - 所以像自定义错误消息,特定值,甚至像
这样的列表TYPE myTableType IS TABLE OF VARCHAR2(100);
myObj mytype := NEW myTableType ('value1','value2')
不过,我现在想向其中添加一个完整的 "dictionary" 结构 - 因此该包中的键-> 值对列表。
似乎我无法初始化该部分中的 table 条记录,正如此处已经询问的那样: https://asktom.oracle.com/pls/asktom/f?p=100:11%3A0%3A%3A%3A%3AP11_QUESTION_ID:14334298866128 link 中提到的 table 个对象似乎也不是我的解决方案。不确定什么是某种最佳解决方法。
有什么想法吗?
给定包规格
CREATE OR REPLACE PACKAGE example IS
TYPE assoc_array_type IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);
g_const_array assoc_array_type;
PROCEDURE dummy_proc (i_var NUMBER);
END example;
/
您可以按如下方式初始化关联常量数组
CREATE OR REPLACE PACKAGE BODY example IS
PROCEDURE dummy_proc (i_var NUMBER) IS
BEGIN
dbms_output.put_line(g_const_array('key_1'));
END dummy_proc;
BEGIN
g_const_array('key_1') := 'value_1';
g_const_array('key_2') := 'value_2';
g_const_array('key_3') := 'value_3';
END example;
/
为了测试,编译 spec 和 body,然后调用 dummy_proc,这将在控制台打印 value_1
。关联数组也可以根据不同的需要用binary_integer或pls_integer索引
编辑:第二个包显示您可以引用 public 数组并从其他包的初始化中获取值。
CREATE OR REPLACE PACKAGE example_2 IS
PROCEDURE dummy_proc (i_key VARCHAR2);
END example_2;
/
CREATE OR REPLACE PACKAGE BODY example_2 IS
PROCEDURE dummy_proc (i_key VARCHAR2) IS
BEGIN
dbms_output.put_line(example.g_const_array(i_key));
END dummy_proc;
END example_2;
/
BEGIN
example_2.dummy_proc('key_1');
END;
/