以下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}}?
答案 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 - 它只执行一次并编译成数据库对象。
您可以拥有一个异常流程,根据表中的数据检查元数据,以查找可能需要更新的内容。