我想在表格的某些字段上设置UPDATE
,包括FROM
条件,如下所示:
UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET
ID = NULL,
IMPORT_DATE = NULL,
IMPORT_STATUS = 0,
ERROR_CODE = 3,
LASTMODIFIEDAT = NULL
FROM T_BEDA
WHERE 1=1
AND TB.TRANSACTION_ID = 999
AND TB.TRANSACTION_ID = T_BEDA.TAC
AND T_BEDA.SOP IS NULL;
在当前状态下,它失败并显示以下错误:
错误报告 -
SQL错误:ORA-00933:SQL命令未正确结束
显然,在这种情况下不允许使用FROM
子句。
基本上,我希望此更新仅在T_BEDA.SOP
为NULL
时才会发生。如何使用SQL或PL / SQL解决此问题?
答案 0 :(得分:2)
使用IN
子句检查TRANSACTION_ID
中是否存在T_BEDA
:
UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
IMPORT_DATE = NULL,
IMPORT_STATUS = 0,
ERROR_CODE = 3,
LASTMODIFIEDAT = NULL
WHERE TB.TRANSACTION_ID = 999
AND TB.TRANSACTION_ID IN (
SELECT T_BEDA.TAC
FROM T_BEDA
WHERE TB.TRANSACTION_ID = T_BEDA.TAC
AND T_BEDA.SOP IS NULL
)
答案 1 :(得分:2)
看起来您正在尝试使用Postgres更新语法。 Oracle不支持此功能,也不支持更新联接,但您可以将更新改为使用WHERE
子句中的子查询来检查第二个表:
UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,
IMPORT_DATE = NULL,
IMPORT_STATUS = 0,
ERROR_CODE = 3,
LASTMODIFIEDAT = NULL
WHERE
TB.TRANSACTION_ID = 999 AND
EXISTS (SELECT 1 FROM T_BEDA t WHERE TB.TRANSACTION_ID = t.TAC AND t.SOP IS NULL)
答案 2 :(得分:0)
以下是我要做的事情:
UPDATE T_NEW_TABLE_IMPORT_STATUS TB
SET ID = NULL,IMPORT_DATE = NULL,IMPORT_STATUS = 0,ERROR_CODE = 3, LASTMODIFIED = NULL
WHERE
(TB.TRANSACTION_ID = 999) AND
(TB.TRANSACTION_ID) = (Select T_BEDA.TAC From T_BEDA WHERE T_BEDA.SOP IS NULL)