2011-08-24 101 views
1

以下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是列名的条件(和FK)列名的字符串值sales_channel,它在general_code(作为PK)被引用。

我知道这SQL是非便携式在于当的A_MAP_TYPE变化,即,B_MAP_TYPE名称,则相应的SQL需要改变。有没有办法在此SQL中执行类似PL/SQLTABLE_NAME.COLUMN_NAME%TYPE

回答

3

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

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

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

2

不是。您可以构建动态SQL并立即使用执行,但我不建议这样做。

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

您可以拥有一个例外进程,它根据表中的数据检查元数据以查找可能需要更新的内容。