2010-04-14 3 views
2

현재 시간을 가져 와서 다른 스크립트로 전달해야하는 스크립트가 있습니다.한 스크립트에서 다른 스크립트로 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".

내가 입력 할 수 있습니다, 수동으로 실행하려면 :

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

그러나이 날짜 시간을 하드 코딩하는 것이 비현실적이다 : 나는 어떤 작업을 수행하는 것은이 것을 발견

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

. 누구든지이 문제를 어떻게 처리해야하는지 알고 있습니까?

(오라클 10g)

답변

4

당신은 NEW_VALUE clause of the COL command 동적으로 대체 변수에 값을 검색하는 데 사용할 수 있습니다

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 
+0

예, 작동하는 것 같습니다. :) – FrustratedWithFormsDesigner

1

는 그냥 "테스트 보고서 script.sql"스크립트에서 바인드 변수를 참조 할 수 있습니까? 즉, "test report script.sql"에서 SQL Plus 정의 변수를 건너 뛰고 v_s_time 및 v_e_time을 직접 참조 할 수 있습니다. 바인드 변수를 SQL에 더한 DEFINE 변수로 변환하는 정말 우아한 방법은 없습니다.

+0

그 일을합니까? 내일은 해봐야 겠어. 나는'scriptB'에 대한 아이디어가'scriptA'에서 생성되었거나 생성되지 않았던 변수에 따라 다르며,'scriptB'를 테스트 목적으로 실행하는 것을 더 어렵게 만듭니다. 그러나 이것이 유일한 방법 일 경우 ... – FrustratedWithFormsDesigner