pasando valor de la variable sqlplus de una escritura a otra
-
27-09-2019 - |
Pregunta
Tengo un script que obtiene la hora actual, y debe pasar a otro guión.
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.
Esto no funciona, parece que el :v_s_time
literal se pasa a la secuencia de comandos, en lugar de lo que quiero:. "2010-04-14 05:50:01 PM"
Para ejecutar esto manualmente, podría entrar en:
@"test report script.sql" "2010-04-14 05:50:01 PM" "2010-04-14 05:57:34 PM"
He encontrado que lo que hace el trabajo es la siguiente:
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";
Pero no es realista codificar los datetimes. Alguien sabe cómo manejar esto?
(Oracle 10g)
Solución
Se puede utilizar la cláusula de NEW_VALUE el comando COL para recuperar dinámicamente un valor en una variable de sustitución:
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
A continuación, puede llamar a la secuencia de comandos con esta variable de sustitución:
@"test report script.sql" &&v_date
Otros consejos
Puede usted acaba de hacer referencia a las variables se unen en el guión "prueba de informe script.sql"? En otras palabras, en "script.sql informe de la prueba", que tiene una referencia directa a v_s_time y v_e_time, sin esperar SQL Plus definir variable. No parece haber ninguna manera muy elegante convertir de variables se unen a Plus las variables que se defina SQL.