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

Posted

技术标签:

【中文标题】Oracle - 将游标数据插入自定义类型表【英文标题】:Oracle - inserting cursor data into a custom type table 【发布时间】:2014-02-11 15:07:02 【问题描述】:

我有一个像

这样的类型
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】:

你不能那样做吗?

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)实现了创建数组的对象。

【讨论】:

以上是关于Oracle - 将游标数据插入自定义类型表的主要内容,如果未能解决你的问题,请参考以下文章

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常

求oracle高手,存储过程中取游标值时,出现数据类型不一致问题,急急

oracle存储过程有没有对象的概念? 就是在定义参数的时候能不能定义一个对象呢?

使用字符串变量将自定义日期和当前时间插入 Oracle 数据库

在带有 oracle 光标的过程中使用用户定义的函数

Django数据库如何将一个表自定义的key列还原成id列作为key