如何将表达式的结果分配给SQL替换变量?

时间:2015-09-01 23:50:27

标签: sql oracle sqlplus

您可以评估表达式并将结果分配给替换变量吗?

在我的情况下,我需要调用一个包含替换变量的旧脚本。我需要在调用脚本之前计算该变量的值。我正在使用Oracle SQL和SQL * Plus

这是基本问题:

def this_num = 2+2
@old_script

在old_script.sql中

select '&this_num' from dual;  -- Probably shouldn't change this

收率:    '2 + 2'

有没有办法强制进行评估,以便替换变量获得表达式的结果而不是表达式本身?

2 个答案:

答案 0 :(得分:1)

def this_num = 2+2
@old_script

old_script中,您可以说

select &this_num from dual;

您不需要在变量名称周围使用''。这应该有用。

答案 1 :(得分:0)

工作解决方案

我在这里找到了一个有效的答案:https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia#2_5

以下是相关文字。

  

2.5在替换变量中存储查询列值

     

存储在数据库中的数据可以放入替换变量中:

SQL> column last_name new_value mynv
SQL> select last_name from employees where employee_id = 100;
     

COLUMN命令中的NEW_VALUE选项隐式创建一个   替换变量称为“mynv”。变量不是物理上的   创建,直到查询引用LAST_NAME列。什么时候查询   完成后,变量“mynv”保存最后一个检索到的值   列“last_name”:

SQL> define mynv
DEFINE mynv      = "King" (CHAR)

所以你这样做:

column DUMMY_COLUMN_NAME new_value THIS_NUM
select 2+2 DUMMY_COLUMN_NAME from dual;

select '&&THIS_NUM' from dual;

'4'
------------
           4

多田!

邪恶的解决方案

对于娱乐价值,这里有一个非常邪恶的解决方法,如果变量曾经在引号之外使用,它会破坏:

define this_num = "' || 2+2 ||'" (CHAR)

然后:

select '&&this_num' from dual;

评估为:

select '' || 2+2 ||'' from dual;

哪个收益率:

4