2017-11-17 5 views
0

sysdateをV_TODAY変数に渡したいのですが、他のブロックやスプーリングに使用できます。私は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ではないsys_dateを持っていて、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です。これらは宣言のものではありません。 –

関連する問題