質問

現在時刻を取得するスクリプトがあるので、それを別のスクリプトに渡す必要があります。

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 変数。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top