2015-02-24 52 views
0

假設我有一個包規範。該商店的恆定值,這是廣泛應用於其他包使用(其程序主要) - 這樣的東西像自定義錯誤消息,具體數值,甚至列出像在oracle包中創建一個字典式的值集合規範

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 ,似乎在鏈接中提到對象的表是不是我的解決辦法。不知道什麼是某種最好的解決方法。

任何想法?

+0

更多的情況下是需要提供一個解決方案的幫助,但你可能要檢討[關聯數組](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites。 HTM#CHDEIDIC)。這是PL/SQL中的鍵/值對類型,與其他語言中的字典或散列映射非常相似。 – 2015-02-24 16:27:27

+0

我將如何初始化所提到的包塊中的關聯數組? – aPinchOfInsomnia 2015-02-24 20:27:27

回答

2

給定一包規範

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; 
/

爲了測試,編譯規範和身體,然後調用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; 
/ 
+0

好吧,我忘了提一件重要的事情。 如果我這樣做,那麼我擔心g_const_array值在其他包中將不可見,因爲我所讀取的包體是一個在範圍方面是「私有」的部分。 我的包因此根本沒有包體。 – aPinchOfInsomnia 2015-02-25 07:08:56

+0

好吧,我的腦海裏浮現出一個想法 - 我可以添加一個函數來模仿一個getter - 在我的body中創建我想要的東西,如果我將它添加到package spec中,該函數是公共的,然後我可以返回我的這個功能的記錄表。 – aPinchOfInsomnia 2015-02-25 08:36:07

+0

包體實際上是「私有」的,但是你將初始化與實際變量混淆了。初始化代碼在包被第一次觸摸時運行,將值放入公共數組中。它實際上可以被其他軟件包使用。 – 2015-02-26 17:38:46

相關問題