2

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

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)

4

2 に答える 2

4

COL コマンドの NEW_VALUE 句を使用して、値を動的に取得して代替変数に入れることができます。

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
于 2010-04-15T07:56:27.537 に答える
1

「test report script.sql」スクリプトでバインド変数を参照できますか? つまり、「テスト レポート script.sql」では、SQL Plus 定義変数をスキップして、v_s_time と v_e_time を直接参照しています。バインド変数から SQL Plus の DEFINE 変数に変換するための本当に洗練された方法はないようです。

于 2010-04-14T22:53:17.863 に答える