获取无效的标识符SQL查询

时间:2019-02-07 07:23:47

标签: oracle

我正在尝试执行下一个查询:

MERGE INTO NOTIFICATION_OBJS p
  USING (SELECT 
   :fcsNotif_id as doc_id,
   :OKPD2_code as OKPD2_code,
   :OKPD2_name as OKPD2_name,
   :quantity_value as quantity, 
   :purchaseObject_price as price 
   FROM DUAL
  ) v
  ON (p.doc_id=v.doc_id)
  WHEN  MATCHED THEN
    UPDATE SET 
      p.OKPD2_code = v.OKPD2_code,
      p.OKPD2_name = v.OKPD2_name,
      p.quantity_value = v.quantity_value,
      p.price = v.price

  WHEN NOT MATCHED THEN
    INSERT (p.doc_id, p.OKPD2_code, p.OKPD2_name, p.quantity_value, p.price)
    VALUES(v.doc_id, v.OKPD2_code, v.OKPD2_name, v.quantity_value, v.price)

我要发送绑定方法下一个字典:

{'OKPD2_code': '62.02.30.000', 'OKPD2_name': 'some text', 'purchaseObject_price': '20466982.25', 'quantity_value': '1', 'fcsNotif_id': '18941152'}

enter image description here

但是我遇到了错误:

ORA-00904: "P"."OKPD2_NAME": invalid identifier

所有其他具有绑定的查询均有效。请帮助我找到错误。

1 个答案:

答案 0 :(得分:0)

OKPD2_NAME表中没有NOTIFICATION_OBJS列。

如果在创建该表(及其列)时使用了双引号,则应该

  • 重新创建不带双引号的表格,或者
  • 再次使用双引号引用表(及其使用大小写混合的列),并在创建表时精确指定大小写

[编辑,上传屏幕截图后]

列名实际上是使用大小写混合的,因此您必须完全像这样引用它:"OKPD2_name"注意双引号和大小写混合。

如果您使用"okpd2_name""okPD2_NAME"或除"OKPD2_name"以外的任何其他字符,它将不起作用。再次:消除双引号。