2015-10-26 50 views
1

我想手動將自定義BLOB文件插入到本地表變量中。我想使用它像VARRAY但我使用TABLE類型,因爲我不知道文件的最大數量。在oracle中插入自定義記錄TABLE-VARRAY

這是我的包代碼:

CREATE OR REPLACE PACKAGE my_pkg AS 
    TYPE rec_headers IS RECORD 
    (
     file1 BLOB := EMPTY_BLOB(), 
     file2 BLOB := EMPTY_BLOB() 
    ); 
    TYPE tab_headers IS TABLE OF rec_headers; 
END my_pkg; 

這是我的PL \ SQL塊:

DECLARE 
    p_headers my_pkg.tab_headers; 

    p_my_file1 BLOB := EMPTY_BLOB(); 
    p_my_file2 BLOB := EMPTY_BLOB(); 
BEGIN 
    p_headers := my_pkg.tab_headers(); 

    /* Process that fills p_my_file1 and p_my_file2 */ 

    p_headers.EXTEND; 

    p_headers(1) := my_pkg.rec_headers(p_my_file1, p_my_file2); 
END; 
/

我收到以下錯誤

PLS-00222: no function with name 'REC_HEADERS' exists in this scope 

我假設是因爲rec_headersRECORD類型,所以我試圖將其更改爲OBJECT但它然後抱怨說,包內不支持。

我不能在包外創建OBJECT類型,因爲我沒有特權(我不會得到它們)。

還有一種方法可以實現它只是使用變量?

回答

2

您應該能夠直接引用記錄的字段,而不是嘗試使用構造函數。

DECLARE 
    p_headers my_pkg.tab_headers; 

    p_my_file1 BLOB := EMPTY_BLOB(); 
    p_my_file2 BLOB := EMPTY_BLOB(); 
BEGIN 
    p_headers := my_pkg.tab_headers(); 

    /* Process that fills p_my_file1 and p_my_file2 */ 

    p_headers.EXTEND; 

    p_headers(1).file1 := p_my_file1; 
    p_headers(1).file2 := p_my_file2; 
END; 
/
+0

簡單是最終的複雜,感謝的人 –