我有一个包含10列的表,名称为:cost201907,cost201906,cost201905 ......
我想在今天的月份和年份中添加一个变量:a = 201907
:host
我的目标是使用此变量选择一列。
每个月运行一个脚本,该脚本使用变量
给出我今天的日期。,然后使用它用select语句选择最近的列,例如:
.preview[hidden=false] {
& {
:host {
overflow: hidden;
}
}
}
可能我会使用PL / SQL,但仍然找不到方法。请帮助我。
答案 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
隐藏旧的/新的显示。