あるスクリプトから別のスクリプトに sqlplus 変数の値を渡す
-
27-09-2019 - |
質問
現在時刻を取得するスクリプトがあるので、それを別のスクリプトに渡す必要があります。
variable v_s_time varchar2(30);
exec :v_s_time := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
--Lots of unrelated code here
variable v_e_time varchar2(30);
exec :v_e_time := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
@"test report script.sql" :v_s_time :v_e_time; --yes, I also tried ":v_s_time", didn't seem to do anything.
これは機能しません、文字通り :v_s_time
私が望むものではなく、スクリプトに渡されます。 "2010-04-14 05:50:01 PM"
.
これを手動で実行するには、次のように入力します。
@"test report script.sql" "2010-04-14 05:50:01 PM" "2010-04-14 05:57:34 PM"
機能するものは次のとおりであることがわかりました。
define v_s_time = "2010-04-14 05:50:01 PM"
--Lots of unrelated code here
define v_e_time = "2010-04-14 05:57:34 PM"
@"test report script.sql" "&&v_s_time" "&&v_e_time";
しかし、日時をハードコーディングするのは非現実的です。これに対処する方法を知っている人はいますか?
(オラクル10g)
解決
あなたはの NEW_VALUE句を使用することができますCOLコマンドには、動的に代替変数に値を取得します:
SQL> /*Declare that the "dat" column will be stored in the v_date variable*/
SQL> COL dat NEW_VALUE v_date
SQL> SELECT to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM') dat FROM dual;
DAT
----------------------
2010-04-15 09:54:29 AM
SQL> select '&&v_date' from dual;
'2010-04-1509:54:29AM'
----------------------
2010-04-15 09:54:29 AM
あなたは、この代替変数を使用してスクリプトを呼び出すことができます:
@"test report script.sql" &&v_date
他のヒント
「test report script.sql」スクリプト内のバインド変数を参照するだけでよいでしょうか?つまり、「テストレポート script.sql」では、SQL をスキップして、v_s_time と v_e_time を直接参照します。さらに変数を定義します。バインド変数から SQL に変換する本当にエレガントな方法はないようですさらに DEFINE 変数。
所属していません StackOverflow