передача значения переменной sqlplus из одного скрипта в другой

У меня есть скрипт, который получает текущее время и должен передать его другому скрипту.

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

Но нереально жестко запрограммировать дату и время. Кто-нибудь знает, как с этим справиться?

(Оракул 10г)


person FrustratedWithFormsDesigner    schedule 14.04.2010    source источник


Ответы (2)


Вы можете использовать предложение NEW_VALUE команды COL. для динамического извлечения значения в замещающую переменную:

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
person Vincent Malgrat    schedule 15.04.2010

Можете ли вы просто сослаться на переменные связывания в сценарии "test report script.sql"? Другими словами, в «тестовом отчете script.sql» у вас есть прямая ссылка на v_s_time и v_e_time, пропуская переменную определения SQLPlus. Кажется, не существует действительно элегантного способа преобразования переменных связывания в переменные SQLPlus DEFINE.

person DCookie    schedule 14.04.2010
comment
Это работает? Хм надо завтра попробовать. Мне не нравится идея зависимости scriptB от переменных, которые могут быть созданы или не созданы в scriptA, и это усложняет запуск scriptB в целях тестирования, но если это единственный способ... - person FrustratedWithFormsDesigner; 15.04.2010