2017-08-09 2 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 

私は必ずしもされていないので、あなたはreplace()操作が置換変数が後で参照されるたびに繰り返されることを見ることができる上verifyを残してきました大したことではありませんが、認識すべきことです。

また、変数を定義するために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 

が、再び。