で下位互換性のあるクエリを作成したいと考えていますSYS.ALL_ARGUMENTS
。Oracle 11g では、便利なALL_ARGUMENTS.DEFAULTED
列が追加されました。Oracle 10g に対してこのクエリを実行すると、次のようになります。
SELECT defaulted FROM all_arguments
もちろん、エラーが発生します。
ORA-00904: "SYS"."ALL_ARGUMENTS"."DEFAULTED": 識別子が無効です
私がやりたいことはこれです:
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
PL/SQLに頼らずに、単一のSQLクエリでそれを行う方法はありますか? または、最初に次のように Oracle のバージョンを確認する必要があります。
SELECT count(*)
FROM all_tab_cols
WHERE owner = 'SYS'
AND table_name = 'ALL_ARGUMENTS'
AND column_name = 'DEFAULTED'