2017-11-17 1 views
0

다른 무의미한 블록이나 스풀링 중에 사용할 수있는 V_TODAY 변수에 sysdate를 전달하고 싶습니다. V_TODAY 선언해야합니다 오류를 제공하는 코드 아래에 쓰고 있어요. 값이 NAME이고 ID가있는 변수의 경우 값을 전달할 수 있습니다.oracle에서 sys_date로 변수를 전달하는 방법

SET ECHO OFF; 
SET FEEDBACK OFF; 
SET HEAD OFF; 
SET LIN 256; 
SET TRIMSPOOL ON; 
SET WRAP OFF; 
SET PAGES 100; 
SET TERM OFF; 
SET SERVEROUTPUT ON; 

SPOOL F:\LATEST\Loop_TRE.sql; 

PROMPT VAR NAME VARCHAR2(100); 
PROMPT VAR ID VARCHAR2(100); 
PROMPT VAR V_TODAY date; 

BEGIN 
FOR TARGET_POINTER IN (SELECT NAME, ID from D_URL) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE('DEFINE TARGET = '''||TARGET_POINTER.NAME||''';'); 
    DBMS_OUTPUT.PUT_LINE('EXEC :NAME := '''||TARGET_POINTER.NAME||'''; '); 
    DBMS_OUTPUT.PUT_LINE('DEFINE TARGET1 = '''||TARGET_POINTER.ID||''';'); 
    DBMS_OUTPUT.PUT_LINE('EXEC :ID := '''||TARGET_POINTER.ID||'''; '); 
    DBMS_OUTPUT.PUT_LINE('@@TGT_DOP.sql;'); 
    END LOOP; 
    Select SYS_DATE INTO V_TODAY from DUAL; 
    DBMS_OUTPUT.PUT_LINE('DEFINE V_TODAY = '''||V_TODAY||''';'); 
    DBMS_OUTPUT.PUT_LINE('EXEC :V_TODAY := '''||V_TODAY||'''; '); 
    DBMS_OUTPUT.PUT_LINE('@@Loop_TST.sql;'); 
END; 
/

SPOOL OFF; 

@@Loop_TRE.sql; 
+0

당신이 당신의 익명 블록에'V_TODAY'을 선언하는 대신 메시지를 표시하려고 했습니까? – fen1x

+0

아니요 나는 단지 메시지를 표시하지 않고 있습니다. 나는 TGT_DOP.sql의 이름과 ID에 변수 값을 사용할 수있다. – Andrew

+0

sysdste가 sysdste가 아니며, vtoday가 into 함수에 대한 변수가되어야한다는 점에 동의하는 경향이있다. where 절이 없다. –

답변

1

선언 선언 블록 V_TODAY하고 코드 참조 대신

SYS_DATE

SYSDATE를 사용

SET ECHO OFF; 

. 
. 
PROMPT VAR NAME VARCHAR2(100); 
PROMPT VAR ID VARCHAR2(100); 

DECLARE 
V_TODAY DATE; 
BEGIN 
.... 
... 
END LOOP; 
Select SYSDATE INTO V_TODAY from DUAL; 

... 
... 
+0

나는 할 수 없다. 스풀링을 사용하기 때문에 여기에 선언을 사용하면 오류가 발생합니다. 당신이 볼 수 있듯이 나는 아무 문제없이 이름과 ID에 대한 변수를 전달하고 TGT_DOP.sql에서 사용할 수 없습니다. 왜 V_TODAY 변수를 사용할 수 없는지 이해하지 못합니다. 또한 SYS_DATE에서 SYSDATE로 여전히 변경되었습니다. – Andrew

+0

@ Andrew : 기본적으로 TARGET_POINTER의 속성이므로 사용할 수있는 이름과 ID가 있습니다. 이것들은 선언문에서 나온 것이 아닙니다. –

관련 문제