0

我有一个看起来或多或少类似于下面的 sql -

宣布
  some_Date 日期;
开始
从 dual 中选择 sysdate 到 some_Date ;
合并成
  (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)
当匹配然后
  更新集 P.status = 'D'
当不匹配时
  插入
    (可乐,colb,colc)
    价值观
    (xxx,xxx,xxx);
结尾 ;

当我通过直接将 some_date 替换为 sysdate 来运行上述查询时,它执行时没有错误。但是我替换了 using 子句中的 sysdate 并尝试动态使用它,但出现以下错误。我得到一个例外如下 -

错误报告:

ORA-00600: 内部错误代码, 参数: [qcsfbdnp:1], [B1], [], [2], [], [], [], [], [], [], [], []
ORA-06512: 在第 5 行
00600. 00000 - “内部错误代码,参数:[%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s] "
*原因:这是 Oracle 程序的通用内部错误号
           例外。这表明一个进程遇到了
           特殊情况。
*行动:报告为错误 - 第一个参数是内部错误号

这是oracle中的已知错误吗?什么是替代品?

更新:修正了一个错字!

4

1 回答 1

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   );
于 2013-05-16T13:40:17.983 回答