我有一个看起来或多或少类似下面的SQL -
declare some_Date date; begin select sysdate into some_Date from dual ; merge into (SELECT cola, colb, colc FROM TableA WHERE status='A' AND some_id = 101) P USING ( select some_Date as cola from dual ) S ON (P.cola=S.cola) WHEN MATCHED THEN UPDATE SET P.status = 'D' WHEN NOT MATCHED THEN INSERT ( cola, colb, colc ) VALUES ( xxx, xxx, xxx ); end ;
当我通过直接用sysdate替换some_date来运行上述查询时,它执行时没有错误。但我替换using子句中的sysdate并尝试动态使用它我得到以下错误。 我得到一个例外如下 -
Error report: ORA-00600: internal error code, arguments: [qcsfbdnp:1], [B1], [], [2], [], [], [], [], [], [], [], [] ORA-06512: at line 5 00600. 00000 - "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]" *Cause: This is the generic internal error number for Oracle program exceptions. This indicates that a process has encountered an exceptional condition. *Action: Report as a bug - the first argument is the internal error number
这是oracle中的一个知道错误吗?什么是候补?
更新:修正了错字!
答案 0 :(得分:2)
试试这个
merge into TableA P
USING ( select some_Date as cala from dual ) S
ON (P.cola=S.cola)
WHEN MATCHED THEN
UPDATE SET P.status = 'D'
WHERE status='A' AND some_id = 101
WHEN NOT MATCHED THEN
INSERT
( cola, colb, colc )
VALUES
( xxx, xxx, xxx );