Pergunta

Tenho um script que obtém a hora atual e devo passá-la para outro 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.

Isso não funciona, parece que o literal :v_s_time é passado para o script, em vez do que eu quero: "2010-04-14 05:50:01 PM".

Para executar isso manualmente, eu poderia inserir:

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

Descobri que o que funciona é isto:

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

Mas não é realista codificar as datas e horas.Alguém sabe como lidar com isso?

(Oráculo 10g)

Foi útil?

Solução

Você pode usar o Cláusula new_value do comando COL Para recuperar dinamicamente um valor em uma variável substituta:

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

Você pode ligar seu script com esta variável substituta:

@"test report script.sql" &&v_date

Outras dicas

Você pode apenas fazer referência às variáveis ​​de ligação no script "test report script.sql"?Ou seja, em "test report script.sql", você tem uma referência direta a v_s_time e v_e_time, ignorando o SQLAlém disso, defina variável.Não parece haver nenhuma maneira realmente elegante de converter variáveis ​​de ligação em SQLAlém de variáveis ​​DEFINE'd.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top