Domanda

Ho uno script che ottiene l'ora corrente, e devono passare ad un altro script.

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.

Questo non funziona, sembra che il :v_s_time letterale viene passato allo script, invece di quello che voglio:. "2010-04-14 05:50:01 PM"

Per eseguire questa operazione manualmente, potevo entrare:

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

ho scoperto che quello che funziona è questo:

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

Ma non è realistico hardcode i datetimes. Qualcuno sa come gestire questo?

(Oracle 10g)

È stato utile?

Soluzione

È possibile utilizzare la clausola di NEW_VALUE di il comando COL per recuperare dinamicamente un valore in una variabile sostituto:

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

È quindi possibile chiamare lo script con questa variabile sostituto:

@"test report script.sql" &&v_date

Altri suggerimenti

Si può solo fare riferimento alle variabili di bind nello script "test rapporto script.sql"? In altre parole, nel "rapporto di prova script.sql", si dispone di un riferimento diretto alla v_s_time e v_e_time, saltando la SQL Inoltre definisce variabile. Non sembra esserci alcuna davvero elegante modo per convertire da variabili bind a SQL taglie variabili DEFINE'd.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top