你建議差不多有效;你需要,雖然附上基礎變量在單引號:
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
但同樣可能不適合無論你是做後面的工作。