我正在使用从 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
我想知道以下内容,这可以在数据库级别实现吗?
如果我想将数组从 Java 传递给过程,我可以使用数组表吗?如果是这样,我可以在包级别声明它还是应该在架构级别声明它?
如果我可以创建表类型的数组,而不是在将类型创建为对象时手动写入所有列,那么它将很容易管理。