Oracle - 将游标数据插入自定义类型表

时间:2014-02-11 15:07:02

标签: sql oracle plsql cursor

我有类似

的类型
CREATE OR REPLACE TYPE MY_TYPE AS OBJECT
(
  id               NUMBER(10, 0),
  name             VARCHAR2(4),
  lastName         VARCHAR2(13),
  address          VARCHAR2(30),
  previousAddress  VARCHAR2(80)
);

以及这些

的表格
CREATE OR REPLACE TYPE MY_TYPE_ROWS AS TABLE OF MY_TYPE

我想要做的是插入从“MY_TYPE_ROWS”表中的游标返回的一些行。 (我想在pl / sql程序中这样做)

我要插入“MY_TYPE_ROWS”的数据位于以下游标中:

cursor dataCursor IS 
select 
id,name, lastName,address,previousAddress
from table1;

(光标返回超过1行)

我尝试过类似的事情:

 my_table_rows           MY_TYPE_ROWS := MY_TYPE_ROWS ();

  OPEN dataCursor ;
  FETCH dataCursor 
  INTO my_table_rows;
  CLOSE dataCursor ;

但我得到一个异常“错误:PLS-00386:在FETCH游标和INTO变量之间'my_table_rows'处发现类型不匹配”

感谢

1 个答案:

答案 0 :(得分:1)

你不能这样做吗?

declare
  my_table_rows           my_type_rows;
begin
  select my_type(id,name,lastname,address,previousaddress)
  bulk collect into my_table_rows
  from table1;

  -- do whatever you want
end;

您的方法的问题在于您尝试按单into选择一行,甚至不包含任何对象。

根据定义,它应该是an array of objects。因此bulk collect实现数组提取,my_type(id,name,lastname,address,previousaddress)实现创建数组的对象。