【问题标题】:Select Into the value with Bulk collect使用批量收集选择进入值
【发布时间】:2013-05-23 06:08:16
【问题描述】:

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

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: 未实现的功能 03001. 00000 - “未实现的功能” *原因:此功能未实现。 *行动:无。 行错误:2 列:1 --------------

我不知道是什么导致了错误。

【问题讨论】:

  • 尝试改用SELECT LAB_LOADING_OBJECT_T(STUDYID,...) 并减少成员进行测试。
  • EFC113$STABLE 是表还是模式(用户)? LBLL 是表还是列?如果是列,它的数据类型是什么?
  • @BobJarvis EFC113$STABLE.LBLL 是一个视图,其结构与我创建的类型相同。
  • @Toru 我试过你的方法,但还是失败了。我不确定错误在哪里。所以现在,我想我必须使用 CREATE TABLE XXX AS (SELECT * FROM ...)
  • 哪个数据库版本?我将从一个 非常 简单的示例开始,看看它是否有效。

标签: plsql bulk


【解决方案1】:

据我所知,这里根本没有涉及类型。看起来您正试图从视图 (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

分享和享受。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多