Frage

Ich habe ein Skript, das die aktuelle Zeit bekommt, und in ein anderes Skript übergeben müssen.

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.

Das funktioniert nicht, scheint es, dass die wörtliche :v_s_time an das Skript übergeben wird, statt, was ich will. "2010-04-14 05:50:01 PM"

diese manuell ausführen zu können, konnte ich eingeben:

@"test report script.sql" "2010-04-14 05:50:01 PM" "2010-04-14 05:57:34 PM"

fand ich das, was funktioniert, ist dies:

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";

Aber es ist unrealistisch, die Datetimes zu codieren. Wer weiß, wie dies zu umgehen?

(Oracle 10g)

War es hilfreich?

Lösung

Sie können die NEW_VALUE Klausel der COL-Befehl , um dynamisch einen Wert in eine Ersatzgröße abrufen:

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

Sie können dann Ihren Skript mit dieser Ersatzgröße nennen:

@"test report script.sql" &&v_date

Andere Tipps

Können Sie nur die Bindevariablen im „Testbericht script.sql“ Skript verweisen? Mit anderen Worten, in "Prüfbericht script.sql", haben Sie einen direkten Verweis auf v_s_time und v_e_time, Überspringen der SQL Plus Variable definieren. Es scheint nicht von Bind-Variablen zu SQL Plus DEFINE'd Variablen jede wirklich elegante Weise zu konvertieren zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top