ORA-00947: 值不足

Posted

技术标签:

【中文标题】ORA-00947: 值不足【英文标题】:ORA-00947 : Not Enough Values 【发布时间】:2013-10-29 03:56:16 【问题描述】:

我知道这是一个新手问题,但我真的不知道我的程序有什么问题,有人可以帮助我吗?

CREATE OR REPLACE PROCEDURE PRC_COPIA_ITEM_LOCACAO
IS
TYPE TP_LOC_ITEM_BKP
IS
  TABLE OF LOC_ITEM_LOCACAO%ROWTYPE;
  LOC_BKP TP_LOC_ITEM_BKP;
BEGIN
  SELECT * BULK COLLECT INTO LOC_BKP FROM LOC_ITEM_LOCACAO;
  FORALL X IN LOC_BKP.FIRST..LOC_BKP.LAST
    INSERT INTO LOC_ITEM_LOCACAO_BKP  VALUES (LOC_BKP(X));
  DBMS_OUTPUT.PUT_LINE('Total de linha: ' || TO_CHAR(SQL%ROWCOUNT));

END;

【问题讨论】:

你得到了什么结果?这将有助于澄清你得到什么错误输出,你想要完成什么等等。请更清楚。 【参考方案1】:

您需要提及列名:

CREATE OR REPLACE PROCEDURE PRC_COPIA_ITEM_LOCACAO
IS
TYPE TP_LOC_ITEM_BKP
IS
  TABLE OF LOC_ITEM_LOCACAO%ROWTYPE;
  LOC_BKP TP_LOC_ITEM_BKP;
BEGIN
  SELECT * BULK COLLECT INTO LOC_BKP FROM LOC_ITEM_LOCACAO;
  FORALL X IN LOC_BKP.FIRST..LOC_BKP.LAST
    INSERT INTO LOC_ITEM_LOCACAO_BKP  VALUES (LOC_BKP(X).column_name1, LOC_BKP(X).column_name2 );
  DBMS_OUTPUT.PUT_LINE('Total de linha: ' || TO_CHAR(SQL%ROWCOUNT));

END;
/

Know more here

【讨论】:

【参考方案2】:

如果您使用记录类型插入,则省略括号:

  FORALL X IN LOC_BKP.FIRST..LOC_BKP.LAST
    INSERT INTO LOC_ITEM_LOCACAO_BKP VALUES LOC_BKP(X);

【讨论】:

以上是关于ORA-00947: 值不足的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00947: 值不足

ORA-00947: 在 Oracle 中创建对象时值不足

ORA-00947 当 UPDATE 返回 BULK COLLECT INTO 用户创建的 TYPE TABLE 时出现“没有足够的值”

尽管列和值匹配,Oracle 给我错误 ORA-00947

SQL 错误:ORA-00947:没有足够的值 - 尝试使用默认值

ORA-00947: 将值放入过程中的类型时没有足够的值