Sql 在oracle TABLE-VARRAY中插入自定义记录

Sql 在oracle TABLE-VARRAY中插入自定义记录,sql,oracle,plsql,Sql,Oracle,Plsql,我想手动将自定义BLOB文件插入本地表变量。我想像使用VARRAY一样使用它,但我使用的是表类型,因为我不知道最大文件数 这是我的软件包的代码: CREATE OR REPLACE PACKAGE my_pkg AS TYPE rec_headers IS RECORD ( file1 BLOB := EMPTY_BLOB(), file2 BLOB := EMPTY_BLOB() ); TYPE tab_headers I

我想手动将自定义
BLOB
文件插入本地表变量。我想像使用
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\u headers
属于
RECORD
类型,所以我尝试将其更改为
OBJECT
,但随后它抱怨包内不支持该类型

我无法在包外创建
对象
类型,因为我没有特权(而且我不会获得特权)


仍然有一种方法可以通过使用变量来实现它?

您应该能够直接引用记录的字段,而不是尝试使用构造函数

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