如何在Oracle SQL中获取列名的String值

时间:2011-08-24 02:56:17

标签: sql oracle

以下SQL试图选择一些值,它满足

的条件
select cd as key_type, decode
from general_code 
where key_type = 'A_MAP_TYPE'
and cd in (
    select distinct(A_MAP_TYPE)
    from sales_channel
);

A_MAP_TYPE是表sales_channel中的列名(和FK),它在general_code中引用(作为PK)。

我意识到这个SQL是不可移植的,因为当A_MAP_TYPE的名称发生变化,即变为B_MAP_TYPE时,需要更改相应的SQL。有没有办法在此SQL中执行PL/SQL的{​​{1}}?

2 个答案:

答案 0 :(得分:3)

您可以使用动态SQL。它可能需要对您现在设置查询的方式进行一些更改,但应该是可行的。

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm

您基本上需要将当前查询转换为字符串,然后执行字符串。您当前的A_Map_字段在哪里,这将是一个参数。对于第一种情况,您需要引用它,使其仍然是执行字符串中的字符串。对于第二个A_Map_字段,您可以在其周围加上引号,

答案 1 :(得分:2)

不是真的。您可以构建动态SQL并使用execute immediate,但我不建议这样做。

也可以使用列元数据代码生成它。此时它就像一个动态生成的CREATE VIEW或CREATE PROC - 它只执行一次并编译成数据库对象。

您可以拥有一个异常流程,根据表中的数据检查元数据,以查找可能需要更新的内容。