【问题标题】:unable to bulk collect into table from PLSQL table type?无法从 PLSQL 表类型批量收集到表中?
【发布时间】:2015-08-10 15:00:35
【问题描述】:
SELECT *   BULK COLLECT INTO CONNECT_RET_ITEM_DETAIL FROM TABLE(RET_ITEM_IN);

这里RET_ITEM_IN是表类型RET_ITM_DTL_TMP的一个实例;

desc RET_ITM_DTL_TMP;

-------------------------------- 
 TYPE RET_ITM_DTL_TMP AS   OBJECT   (
    ITEM_ID       VARCHAR2(50),
    ITEM_DESC     VARCHAR2(50),
    ORDER_NUMBER  VARCHAR2(50),
    PARCEL_NUMBER VARCHAR2(50),
    STORE_NUMBER  VARCHAR2(50),
    QUANTITY      NUMBER ) ;  


desc CONNECT_RET_ITEM_DETAIL

Name          Null Type         
------------- ---- ------------ 
 ITEM_ID            VARCHAR2(50) 
 ITEM_DESC          VARCHAR2(50)  
 ORDER_NUMBER       VARCHAR2(50)  
 PARCEL_NUMBER      VARCHAR2(50)  
 STORE_NUMBER       VARCHAR2(50)
 QUANTITY           NUMBER   

我可以在以下情况下成功批量收集:

  1. 对象到对象
  2. 表到对象
  3. 表到表

但是在对象到表类型插入中失败。收到以下错误:

错误(118,6):PLS-00403:表达式“CONNECT_RET_ITEM_DETAIL”不能 用作 SELECT/FETCH 语句的 INTO 目标

【问题讨论】:

  • 我也试过了,但没有帮助: FORALL i IN RET_ITEM_IN.first .. RET_ITEM_IN.last INSERT INTO CONNECT_RET_ITEM_DETAIL VALUES RET_ITEM_IN(i);
  • CONNECT_RET_ITEM_DETAIL 是数据库表吗?如果不是,那是什么?
  • 不,您不能将bulk collect 放入表中。使用insert into .. select from 语句或forall 构造。 I can successfully bulk collect in 3. Table to table如果我们在谈论db table,那么不,你不能。

标签: sql oracle stored-procedures plsql oracle11g


【解决方案1】:

不确定这是否能完全解决您的问题,但也许这段代码会有用。像这里一样创建表:

create table CONNECT_RET_ITEM_DETAIL of RET_ITM_DTL_TMP;

接下来这个 PL/SQL 对我有用:

declare
  type RET_ITM_DTL_TBL is table of RET_ITM_DTL_TMP;
  RET_ITEM_IN RET_ITM_DTL_TBL;
begin
  RET_ITEM_IN := RET_ITM_DTL_TBL(
      RET_ITM_DTL_TMP ('a11', 'a12', 'a13', 'a14', 'a15', 11), 
      RET_ITM_DTL_TMP ('b11', 'b12', 'b13', 'b14', 'b15', 21),
      RET_ITM_DTL_TMP ('b21', 'b22', 'b23', 'b24', 'b25', 22) );

  FORALL i IN RET_ITEM_IN.first .. RET_ITEM_IN.last 
    INSERT INTO CONNECT_RET_ITEM_DETAIL VALUES RET_ITEM_IN(i);
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多