【问题标题】:Oracle - inserting cursor data into a custom type tableOracle - 将游标数据插入自定义类型表
【发布时间】: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' 处发现类型不匹配”

谢谢

【问题讨论】:

    标签: sql oracle plsql cursor


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2020-09-03
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多