我想在SYS.ALL_ARGUMENTS
上創建向後兼容的查詢。在Oracle 11g中,添加了有用的ALL_ARGUMENTS.DEFAULTED
列。現在,如果我對Oracle 10g運行此查詢:選擇Oracle字典視圖中可能不存在的列
SELECT defaulted FROM all_arguments
當然,我收到一個錯誤。
ORA-00904: 「SYS」 「ALL_ARGUMENTS」 「缺位」:無效的標識符
我想要做的是這樣的:
SELECT CASE WHEN column_exists("defaulted")
THEN defaulted
ELSE 'N'
END
FROM all_arguments
甚至更好
SELECT evaluate_column_on_current_row(column_name => "defaulted",
default_if_not_exists => 'N')
FROM all_arguments
有沒有辦法在單個SQL查詢中做到這一點,而不訴諸PL/SQL?或者,我應該先檢查Oracle版本,如下所示:
SELECT count(*)
FROM all_tab_cols
WHERE owner = 'SYS'
AND table_name = 'ALL_ARGUMENTS'
AND column_name = 'DEFAULTED'
你會得到什麼錯誤? – Arion 2012-04-20 09:22:16
@Arion:ORA-00904 ...查看更新後的問題 – 2012-04-20 09:26:37