2015-10-26 54 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

简单是最终的复杂,感谢的人 –