【问题标题】:Equal sign is missing缺少等号
【发布时间】:2018-07-31 11:41:56
【问题描述】:

以下代码因ORA-00927: missing equal sign 而失败:

if (countExceed > 0) then 
    quer :=
        'Update UID_RM_HIERARCHY I
            SET I.REVIEWER_UID IN
            (
                SELECT L.REVIEWER_UID
                  FROM UID_RM_HIERARCHY L
                 WHERE L.UNIQUE_ID  in (' || p_ID_list || ')
            )
      WHERE I.REVIEWER_UID in('||p_ID_list||')
        AND I.isdeleted=0';

    EXECUTE IMMEDIATE quer;

我应该改变什么来解决它?

【问题讨论】:

  • 存储过程中的plsql块
  • 应该是update x set y = z。你有 IN 应该是等号的地方。
  • 我敢打赌,这会导致TOO-MANY-ROWS,@William。并不是说您的建议是错误的,但我认为 OP 使用 in 试图避免它。查询使用承诺唯一性的L.UNIQUE_ID,但是 - 它与P_ID_LIST 进行比较,这表明正好相反(除非列表包含单个ID,那么不应该有in,而是=)。这就是我恐惧的来源。
  • 同意代码还有很多其他问题。我只是在评论错误消息。
  • 请在您的问题中添加代码,而不是在 cmets 中。

标签: oracle plsql


【解决方案1】:

要让你的代码运行,你可以这样做:

if (countExceed > 0) then 
    quer :=
        'Update UID_RM_HIERARCHY I
            SET I.REVIEWER_UID = -- place always a "=" and no "IN"
            (
                SELECT L.REVIEWER_UID
                  FROM UID_RM_HIERARCHY L
                 WHERE L.UNIQUE_ID  in (' || p_ID_list || ')
                   AND ROWNUM = 1 -- This query has to give you a single value! Because of this we only select the first value (properbly wrong?!)
            )
      WHERE I.REVIEWER_UID in('||p_ID_list||')
        AND I.isdeleted=0';

    EXECUTE IMMEDIATE quer;

但我强烈建议阅读一些教程。或者清楚地解释你在做什么。我仍然不确定你在用这些 p_ID_list 做什么或它包含什么。

如需进一步帮助,请告诉我们:

  • 你的桌子是什么?
  • 它们包含什么?
  • p_ID_list 包含什么?
  • 您打算逐步处理该列表吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多