SqlPlus-定义变量子字符串

SqlPlus-定义变量子字符串,sqlplus,Sqlplus,我是sqlplus新手,在变量的基本用法方面遇到困难:) 我有以下资料: define PROJECT\u VERSION='1.1-SNAPSHOT' 我想创建另一个变量,它包含相同的信息,没有-SNAPSHOT部分(因此它的值是1.1)。当然,我不想键入define PROJECT\u VERSION\u WOSNAP='1.1',而不是像define PROJECT\u VERSION\u WOSNAP=replace(&PROJECT\u VERSION,'-SNAPSHOT','')这

我是sqlplus新手,在变量的基本用法方面遇到困难:)

我有以下资料:

define PROJECT\u VERSION='1.1-SNAPSHOT'

我想创建另一个变量,它包含相同的信息,没有
-SNAPSHOT
部分(因此它的值是
1.1
)。当然,我不想键入
define PROJECT\u VERSION\u WOSNAP='1.1'
,而不是像
define PROJECT\u VERSION\u WOSNAP=replace(&PROJECT\u VERSION,'-SNAPSHOT','')
这样的内容更合适

我怎么做

提前谢谢你。

你的建议几乎奏效;不过,您需要将基本变量括在单引号中:

define PROJECT_VERSION_WOSNAP=replace('&PROJECT_VERSION','-SNAPSHOT',null)

select &PROJECT_VERSION_WOSNAP from dual;

old:select &PROJECT_VERSION_WOSNAP from dual
new:select replace('1.1-SNAPSHOT','-SNAPSHOT',null) from dual

REP
---
1.1
我让
verify
处于打开状态,这样您就可以看到以后每次引用替换变量时都会重复
replace()
操作,这不一定是什么大问题,但需要注意

您还可以使用定义变量:

undefine PROJECT_VERSION_WOSNAP
column TMP_VERSION new_value PROJECT_VERSION_WOSNAP
select replace('&PROJECT_VERSION','-SNAPSHOT',null) as TMP_VERSION from dual;

old:select replace('&PROJECT_VERSION','-SNAPSHOT',null) as TMP_VERSION from dual
new:select replace('1.1-SNAPSHOT','-SNAPSHOT',null) as TMP_VERSION from dual

TMP
---
1.1

select &PROJECT_VERSION_WOSNAP from dual;

old:select &PROJECT_VERSION_WOSNAP from dual
new:select 1.1 from dual

       1.1
----------
       1.1
现在您可以看到引用直接使用该值,而无需重复
replace()
——它只在该列设置查询中发生一次。除了设置“验证关闭”之外,您还可以在设置变量以隐藏它的查询周围
设置“术语输出关闭”
,然后
打开

另一种方法是以另一种方式定义变量:

undefine PROJECT_VERSION
undefine PROJECT_VERSION_WOSNAP
define PROJECT_VERSION_WOSNAP=1.1
define PROJECT_VERSION='&PROJECT_VERSION_WOSNAP.-SNAPHOT'

select '&PROJECT_VERSION', &PROJECT_VERSION_WOSNAP from dual;

old:select '&PROJECT_VERSION', &PROJECT_VERSION_WOSNAP from dual
new:select '1.1-SNAPHOT', 1.1 from dual

'1.1-SNAPHO        1.1
----------- ----------
1.1-SNAPHOT        1.1
但是,如果总是需要的话,那就假设快照部分是
部分,从你问问题的方式来看,我怀疑这可能会改变

另一种方法是使用绑定变量而不是替换变量:

var PROJECT_VERSION varchar2(20);
var PROJECT_VERSION_WOSNAP varchar2(20);
exec :PROJECT_VERSION := '1.1-SNAPSHOT';
exec :PROJECT_VERSION_WOSNAP := replace(:PROJECT_VERSION,'-SNAPSHOT',null);

select :PROJECT_VERSION, :PROJECT_VERSION_WOSNAP from dual;

:PROJECT_VERSION                 :PROJECT_VERSION_WOSNAP
-------------------------------- --------------------------------
1.1-SNAPSHOT                     1.1
但是,无论你以后做什么,这可能都不起作用