3

我想在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'
4

1 回答 1

3

引用不存在的列的查询无法生成有效的计划。

您需要选择一种提交的查询始终有效的方法。无论是动态生成/执行它们,还是其他一些方法。

但是,如果您提交要解析的查询,并且它在存在的表上包含不存在的字段,则解析器会将其返回给您。

于 2012-04-20T09:24:12.977 回答