【问题标题】:01722. 00000 - "invalid number" in SQL Update01722. 00000 - SQL 更新中的“无效数字”
【发布时间】:2014-03-14 09:17:55
【问题描述】:

我正在更新 temp_docmeta 表中的 xprojecttype 并尝试通过包含 "d.xproject_id NOT IN" 子句来忽略以下查询中的所有无效数字,但它仍然向我抛出 01722. 00000 - "invalid number" 错误。

BEGIN
  FOR X IN
  (SELECT projecttype,pid,enddate FROM temp_project
  )
  LOOP
    UPDATE temp_docmeta d
    SET d.xprojecttype     =X.projecttype
    WHERE d.xproject_id    =X.PID
    AND X.projecttype     IS NOT NULL
    AND X.enddate          > '10-MAR-14 00.00.00'
    AND d.xproject_id NOT IN
      (SELECT TO_NUMBER(xproject_id)
      FROM temp_docmeta
      WHERE REGEXP_LIKE(xproject_id, '[^0-9]+')
      );
  END LOOP;
END ;

但是,当我使用 delete 语句删除同一组记录,然后运行上述更新命令时,它可以正常工作。

DELETE
FROM temp_docmeta
WHERE xproject_id IN
  (SELECT xproject_id
  FROM temp_docmeta
  WHERE REGEXP_LIKE(xproject_id, '[^0-9]+')
  );

我不想从我的 temp_docmeta 表中删除上述记录,但需要像第一个查询一样更新 temp_docmeta 表。我该怎么做?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您的查询尝试将 TO_NUMBER 更改为您不想要的所有值

    也许你应该试试

     AND d.xproject_id IN
      (SELECT TO_NUMBER(xproject_id)
      FROM temp_docmeta
      WHERE NOT REGEXP_LIKE(xproject_id, '[^0-9]+')
      );
    

    但这取决于顺序,如何完成 TO_NUMBER 和 REGEXP_LIKE

    【讨论】:

    • 谁能帮助解决这个具体问题?或者,您可以告诉我另一种更新表格中 xprojecttype 列的方法。 P.S-当我用 delete 语句删除同一组记录然后运行上面的更新命令时它工作正常。
    • @PulkitBhatia 你试过上面的答案了吗?它有没有给出任何错误?如果没有错误,那是什么不起作用?
    • @EatAPeach 是的,我做到了,但它最终给了我同样的错误 01722。00000 - “无效号码”
    【解决方案2】:

    我更改了 X.PID 的数据类型,如下所示,to_char 并且它起作用了,但是,当我将 xproject_id 的数据类型更改为“to number”时,它不起作用。奇怪的。不是吗? 还是我错过了什么?

    BEGIN
      FOR X IN
      (SELECT projecttype,pid,enddate FROM temp_PROJECT where projecttype IS NOT NULL
      AND enddate      > '10-MAR-14 00.00.00'
      AND PID NOT LIKE '-1'
      )
      LOOP
        UPDATE temp_docmeta
        SET xprojecttype     =X.projecttype
        WHERE xproject_id    =to_char(X.PID)
        AND xproject_id in
          (SELECT UNIQUE(xproject_id)
          FROM temp_docmeta
          WHERE REGEXP_LIKE(xproject_id, '[0-9]+')
          );
      END LOOP;
    END;
    

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2019-03-10
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2018-06-25
      • 2019-09-07
      相关资源
      最近更新 更多