声明TABLE%TYPE的数组

时间:2013-11-10 07:07:35

标签: oracle stored-procedures plsql oracle10g package

我正在使用接收从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. 在创建类型为对象时,不是手动编写所有列,如果我可以创建表类型数组,那么它将很容易管理。

0 个答案:

没有答案