【问题标题】:Oracle SQL Merge Statement IssueOracle SQL 合并语句问题
【发布时间】:2013-05-11 09:10:27
【问题描述】:

我有一个看起来或多或少类似于下面的 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 中的已知错误吗?什么是替代品?

更新:修正了一个错字!

【问题讨论】:

  • USING 子句是否应该返回一个名为cola 的列?在上面的语句中,它返回一个名为cala 的列。可能只是一个错字,但也许值得一提...
  • 是的,这是一个错字。我现在修好了。
  • 每个 ORA-600 都是一个错误。如果您在 My Oracle Support 上查找它,您将很快找到此问题的答案。 (很抱歉没有在此处发布这些详细信息,但目前尚不完全清楚共享这些信息的规则。)

标签: sql oracle oracle11g sql-merge


【解决方案1】:

试试这个

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   );

【讨论】:

  • 您能帮我理解其中的区别吗? Using 子句中的 some_Date 是我试图通过变量动态插入的内容。我看到了上面的异常。
  • 问题出在into 子句中。您使用了表应该在哪里的查询(将其视为尝试更新视图......可能,但仅在某些情况下)。您可以在插入和更新子句中使用 s.some_data。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多