【问题标题】:How to get the String value of a column name in Oracle SQL如何在 Oracle SQL 中获取列名的字符串值
【发布时间】:2011-08-24 11:01:28
【问题描述】:

下面的 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/SQLTABLE_NAME.COLUMN_NAME%TYPE 的事情?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      也可以使用列元数据进行代码生成。在这一点上,它就像一个动态生成的 CREATE VIEW 或 CREATE PROC - 它只完成一次并编译到数据库对象中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        相关资源
        最近更新 更多