选择带有变量的列名

时间:2019-07-17 13:36:56

标签: oracle-sqldeveloper

我有一个包含10列的表,名称为:cost201907,cost201906,cost201905 ......

我想在今天的月份和年份中添加一个变量:a = 201907

:host

我的目标是使用此变量选择一列。

每个月运行一个脚本,该脚本使用变量

给出我今天的日期。

,然后使用它用select语句选择最近的列,例如:

.preview[hidden=false] {
    & {
        :host {
            overflow: hidden;
        }
    }
}

可能我会使用PL / SQL,但仍然找不到方法。请帮助我。

1 个答案:

答案 0 :(得分:0)

您可以使用替换变量,但您需要以略有不同的方式填充它,并正确形成列名。

目前,您正在使用define,它为a设置了整个字符串;那么您的选择将获得整个字符串作为替换字符串,您可以在set verify on中看到它:

SELECT &a;

old:SELECT &a
new:SELECT to_char(SYSDATE, 'yyyy')|| to_char(SYSDATE, 'mm') from dual

TO_CHA
------
201907

那么当你做

Select  'cost'a  from Table1;

您正在选择文本文字'cost',并为该列表达式指定别名a-与变量完全无关;这样您将看到类似以下的输出:

A   
----
cost
cost
cost
...

表中的每一行都有一个输出行。

使用column ... new_value ...选项代替您的定义,以使虚拟查询的结果可用作以后的替换变量:

column a new_value a;

select to_char(sysdate, 'YYYYMM') as a from dual;

A     
------
201907

select  cost&a  from table1;

old:select  cost&a  from table1
new:select  cost201907  from table1

COST201907
----------
        42
...

您可以将虚拟查询包装在set termout off... on对中,尽管您似乎仍需要使用@从文件中运行脚本,以使其正确生效。满意后,您可以set verify off隐藏旧的/新的显示。