我想在我的脚本中有一个参数一年。
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
答案 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;
执行YYYY2
和column
时会隐式创建 select
,因此无需define
。
SQLDeveloper在其工作表中使用SQL * Plus的方言,请参阅此参考以及有关替换变量的更多详细信息:https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#2_5