2017-08-09 31 views
0

我在sqlplus是新的,和我有我有以下與變量的基本用法:)SQLPLUS - 定義變量子

困難:

define PROJECT_VERSION='1.1-SNAPSHOT'

我會喜歡創建一個其他變量,其中包含相同的信息,但不包含-SNAPSHOT部分(因此其值爲1.1)。當然我不想輸入define PROJECT_VERSION_WOSNAP='1.1',而不是像define PROJECT_VERSION_WOSNAP=replace(&PROJECT_VERSION,'-SNAPSHOT','')這樣的東西更合適。

我該怎麼辦?

謝謝您提前。

回答

1

你建議差不多有效;你需要,雖然附上基礎變量在單引號:

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 

但同樣可能不適合無論你是做後面的工作。