Oracle-10g

如何通過 Oracle 10g 中的選擇結果修復此更新的 Oracle 語法?

  • March 31, 2011

在 10g 下執行時,我在 11g 下開發的更新語句有問題。

我將問題簡化為:

Create table test (
  col1 number(10)
);

insert into test values (1);

update test set col1 = (select 1  from DUAL ) + 1;

select * from test;

在 Oracle 10 上執行時,出現以下錯誤:

update test set col1 = (select 1  from DUAL ) + 1
Error at line 1
ORA-00933: SQL-Befehl wurde nicht korrekt beendet

有什麼想法,我如何修改語句以在 10g 下執行?我想使用一個語句。

我找到了以下解決方法:

update test set col1 = NVL((select 1  from DUAL ), NULL) + 1;

Update 語句的文件即使在 10g 中也允許這種語法,所以這可能是一個錯誤。我在 My Oracle Support 上查找了一個,但找不到。也許您應該向 Oracle 開一個 SR,看看他們怎麼說。

作為一種解決方法,如果您重新安排語句以首先具有文字,它將適用於兩個版本。

update test set col1 = 1 + (select 1 from DUAL );

另一種解決方法是將函式包裝在 to_number 中。我不明白為什麼兩者都應該是必要的。將列更新為包含添加到值的標量子查詢表達式的複合表達式的結果受語法支持並且應該有效。

在這裡發現的類似行為也沒有解決方案。

引用自:https://dba.stackexchange.com/questions/1996