使用批量收集选择进入值

时间:2013-05-23 06:08:17

标签: plsql bulk

首先我创建了一个类型和一个表类型。

CREATE OR REPLACE TYPE LAB_LOADING_OBJECT_T
AS
  object
  (
    STUDYID  VARCHAR2(300),
    USUBJID  VARCHAR2(300),
..... /*So many columns, so I hide them*/
);
  /
CREATE OR REPLACE TYPE LAB_LOADING_TABLE_T
AS
  TABLE OF LAB_LOADING_OBJECT_T;

然后我创建一个表,该列与上面提到的LAB_LOADING_OBJECT_T相同:

CREATE TABLE TMP_EFC11319_LAB_LOADING_T
  (
    STUDYID  VARCHAR2(300),
    USUBJID  VARCHAR2(300),
..... /*So many columns, so I hide them*/
);

最后,我尝试在名为TMP_EFC113_LAB_LOADING_T的表中选择值:

SELECT *
BULK COLLECT INTO TMP_EFC11319_LAB_LOADING_T 
FROM EFC113$STABLE.LBLL ;

LBLL的列与表TMP_EFC113_LAB_LOADING_T相同。但是我遇到了一条错误消息:

-------------
ORA-03001: unimplemented feature
03001. 00000 -  "unimplemented feature"
*Cause:    This feature is not implemented.
*Action:   None.
Error at Line: 2 Column: 1
--------------

我不知道是什么造成了错误。

1 个答案:

答案 0 :(得分:0)

据我所知,这种类型根本不涉及。看起来您正在尝试从视图中选择(EFC113 $ STABLE.LBLL)并插入表(TMP_EFC11319_LAB_LOADING_T)。如果是这种情况,那么执行此操作的方法不是尝试在表中执行BULK COLLECT - 您需要以类似于以下的方式使用INSERT ... SELECT ...:

INSERT INTO TMP_EFC11319_LAB_LOADING_T (STUDYID, USUBJID, ...)
  SELECT STUDYID, USUBJID, ...
    FROM EFC113$STABLE.LBLL

或者,正如您所发现的那样,您可以

CREATE TABLE TMP_EFC11319_LAB_LOADING_T
  SELECT *
    FROM EFC113$STABLE.LBLL

分享并享受。