0

I want to pass sysdate into V_TODAY variable which i can use it for other anounymous block or during spooling. I am writing below code which is giving an error has V_TODAY must be declare. For variable with value NAME and ID i am able to pass the value.

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;
Andrew
  • 3,632
  • 24
  • 64
  • 113

1 Answers1

1

Declare V_TODAY in Declare block and use SYSDATE instead of SYS_DATE

in Reference with your code:

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;

...
...
  • i cannot use declare here because i am using spooling and it will throw error. As you can see i cann pass the variable for Name and ID without any issue and use it in TGT_DOP.sql. So not understanding why i cannot V_TODAY variable. I have also changed from SYS_DATE to SYSDATE still the same error – Andrew Nov 17 '17 at 10:07
  • @Andrew : Name and Id you are able to use as these are the attributes of TARGET_POINTER by default. These aren't from the declaration. – Bikash Ranjan Bhoi Nov 17 '17 at 11:14