SqlPlus - 定义变量子串
SqlPlus - define variable substring
我是 sqlplus 的新手,我在变量的基本用法方面遇到困难:)
我有以下内容:
define PROJECT_VERSION='1.1-SNAPSHOT'
我想创建另一个变量,它包含没有 -SNAPSHOT
部分的相同信息(因此它的值为 1.1
)。当然我不想输入 define PROJECT_VERSION_WOSNAP='1.1'
,而是输入 define PROJECT_VERSION_WOSNAP=replace(&PROJECT_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()
操作,这不一定是什么大问题,但是要知道。
您也可以使用the column ... new_value
syntax来定义变量:
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()
- 它只在该列设置查询中发生一次。除了 set verify off
.
之外,您还可以 set termout off
然后 on
围绕设置变量的查询来隐藏它
另一种方法是反过来定义变量:
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
但如果始终需要,则假设 snapshot
部分,并且从你问问题的方式来看,我怀疑这可能会改变。
另一种方法是始终使用绑定变量而不是替换变量:
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
但无论您以后做什么,这可能都不起作用。
我是 sqlplus 的新手,我在变量的基本用法方面遇到困难:)
我有以下内容:
define PROJECT_VERSION='1.1-SNAPSHOT'
我想创建另一个变量,它包含没有 -SNAPSHOT
部分的相同信息(因此它的值为 1.1
)。当然我不想输入 define PROJECT_VERSION_WOSNAP='1.1'
,而是输入 define PROJECT_VERSION_WOSNAP=replace(&PROJECT_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()
操作,这不一定是什么大问题,但是要知道。
您也可以使用the column ... new_value
syntax来定义变量:
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()
- 它只在该列设置查询中发生一次。除了 set verify off
.
set termout off
然后 on
围绕设置变量的查询来隐藏它
另一种方法是反过来定义变量:
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
但如果始终需要,则假设 snapshot
部分,并且从你问问题的方式来看,我怀疑这可能会改变。
另一种方法是始终使用绑定变量而不是替换变量:
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
但无论您以后做什么,这可能都不起作用。