【发布时间】:2012-05-01 20:56:08
【问题描述】:
我想在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
有没有什么方法可以在单个 SQL 查询中做到这一点,而无需使用 PL/SQL?或者我应该像这样先检查 Oracle 版本:
SELECT count(*)
FROM all_tab_cols
WHERE owner = 'SYS'
AND table_name = 'ALL_ARGUMENTS'
AND column_name = 'DEFAULTED'
【问题讨论】:
-
@Arion: ORA-00904... 查看更新后的问题
标签: sql oracle compatibility information-schema