我正在使用接收从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传递给程序,我可以使用数组表吗?如果是这样,我可以在包级别声明它还是应该在模式级别?
在创建类型为对象时,不是手动编写所有列,如果我可以创建表类型数组,那么它将很容易管理。