прохождение значения переменной SQLPLUS из одного скрипта на другое
-
27-09-2019 - |
Вопрос
У меня есть скрипт, который получает текущее время, и должен пройти его на другой скрипт.
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";
Но это нереально, чтобы жестко управлять датчиками. Кто-нибудь знает, как это справиться?
(Oracle 10G)
Решение
Вы можете использовать Предложение 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
Другие советы
Можете ли вы просто ссылаться на переменные связывания в сценарии «Test Report Script.sql»? Другими словами, в «Test Report Script.sql» у вас есть прямая ссылка на V_S_TIME и V_E_Time, пропуская SQLПлюс определяют переменную. Там, кажется, не кажется никаким действительно элегантным способом преобразования от переменных связывания до SQLПлюс определяет переменные.