あなたが提案した内容ほとんどが動作します。あなたはしかし、単一引用符であなたのベース変数を囲む必要があります。
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
が、再び。