SQL Developer,替换变量,动态创建,基于方程式

时间:2016-05-25 03:47:54

标签: sql oracle variables oracle-sqldeveloper

我想在我的脚本中有一个参数一年。

define YYYY = 2014;

然后我想要一个基于这个

的第二个参数
YYYY2 = &&YYYY - 1;

即。它是在1年前的

但是从我到目前为止所做的阅读来看,这似乎是不可能的。

这是我的尝试

define YYYY = 2014;
define YYYY2 = &&YYYY - 1;

select &&YYYY, &&YYYY2 from DUAL

select * from cb_enrolment2_&&YYYY;
select * from cb_enrolment2_&&YYYY2 ;

最后一行代码的响应是:

ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause: 
*Action: 
Error at Line: x Column: y

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为您将2014 - 1分配给YYYY2

所以:

select &&YYYY, &&YYYY2 from DUAL

变成

select 2014, 2014 - 1 from DUAL

这是一个有效的查询,但

select * from cb_enrolment2_&&YYYY2

变成

select * from cb_enrolment2_2014 - 1

会给你一个错误。

您无法直接对替换变量进行数学运算,但您可以使用带有column参数的new_value命令从数据库中选择数据。所以,没有什么可以阻止你从dual选择算术表达式:

define YYYY = 2014;
column dual_x new_value YYYY2;
select &&YYYY - 1 dual_x from dual;
执行YYYY2column时会隐式创建

select,因此无需define

SQLDeveloper在其工作表中使用SQL * Plus的方言,请参阅此参考以及有关替换变量的更多详细信息:https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#2_5