0

我正在使用从 Java 接收集合到 PL/SQL 过程将记录插入表中。

CREATE OR REPLACE TYPE PROJECT_TYPE IS OBJECT
(
    project_id NUMBER,
    project_desc VARCHAR2 (10),
    project_title VARCHAR2 (25)
);

PROCEDURE project_values (parray IN project_type)
IS
BEGIN
    INSERT INTO  projects (project_id, project_desc, project_title)
        SELECT  *
          FROM  TABLE (parray);
END;

而不是上面我想使用

TYPE array IS TABLE OF projects%ROWTYPE INDEX BY VARCHAR2 (25);

我试图打电话给

INSERT INTO  projects (project_id, project_desc, project_title)
select * from table(p_array);

我收到以下错误

PLS-00382: expression is of wrong type
PL/SQL: ORA-22905: cannot access rows from a non-nested table item

如何通过显式声明所有列来使用关联数组而不是类型对象?如果我可以使用 projects%ROWTYPE,那么我不需要声明所有列。

最好的方法是什么?使用关联数组TABLE%TYPE或将所有列声明为 TYPE 对象?

编辑 1

我想知道以下内容,这可以在数据库级别实现吗?

  1. 如果我想将数组从 Java 传递给过程,我可以使用数组表吗?如果是这样,我可以在包级别声明它还是应该在架构级别声明它?

  2. 如果我可以创建表类型的数组,而不是在将类型创建为对象时手动写入所有列,那么它将很容易管理。

4

0 回答 0