在 oracle 包规范中创建类似字典的值集合

aPi*_*nia 1 plsql

假设我有一个封装规格。存储常量值,这些常量值广泛用于其他包(主要是它们的过程) - 比如自定义错误消息、特定值,甚至列表之类的东西

TYPE myTableType IS TABLE OF VARCHAR2(100); myObj mytype := NEW myTableType ('value1','value2')

然而,我现在想添加一个完整的“字典”结构 - 所以该包中的键->值对的列表。

似乎我无法初始化该部分中的记录表,正如此处已经询问的那样: https: //asktom.oracle.com/pls/asktom/f ?p=100:11%3A0%3A%3A%3A%3AP11_QUESTION_ID:14334298866128 链接中提到的对象表似乎也不是我的解决方案。不确定什么是某种最好的解决方法。

有任何想法吗 ?

Chr*_*Hep 5

给定一个包规范

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;
/
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式初始化关联的常量数组

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;
/
Run Code Online (Sandbox Code Playgroud)

要进行测试,请编译spec和body,然后调用dummy_proc,它将打印value_1到控制台。关联数组也可以通过binary_integer或pls_integer来索引以满足不同的需求。

编辑:第二个包显示您可以引用公共数组并从其他包中的初始化中获取值。

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;
/  
Run Code Online (Sandbox Code Playgroud)