Hello,
Script 1 below result in script 2 (as it should).
If the EXECUTE IMMEDIATE statement is uncommented, it results in script 3 (but it should not).
Why does it exit the loop?
Thanks!
Gabor
Script 1:
Script 2:Code:create or replace procedure p as cursor c1 is select column_name from dba_tab_columns where owner = 'RETAIL' and table_name = 'ENV' and data_type = 'VARCHAR2' order by 1; ls_column_name varchar2(30); ls_sql varchar2(4000); ln_cnt number := 100; begin dbms_output.put_line ( '1 ln_sql=' || ls_sql ); open c1; loop dbms_output.put_line ( '2 ln_sql=' || ls_sql ); fetch c1 into ls_column_name; exit when c1%notfound; dbms_output.put_line ( '3 ln_sql=' || ls_sql ); ls_sql := ' select count(*)' || ' from retail.env where ' || ls_column_name || ' = ''DEMO'''; --execute immediate ls_sql into ln_cnt; dbms_output.put_line ( '4 ln_sql=' || ls_sql ); end loop; close c1; dbms_output.put_line ( '5 ln_sql=' || ls_sql ); exception when others then if c1%isopen then close c1; end if; end p; / show errors begin p; end; /
Script 3:Code:Procedure created. No errors. 1 ln_sql= 2 ln_sql= 3 ln_sql= 4 ln_sql= select count(*) from retail.env where EN_ACTION = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_ACTION = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_ACTION = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_AELONGNAME = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_AELONGNAME = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_AELONGNAME = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_BCAST = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_BCAST = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_BCAST = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_BRANCH = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_BRANCH = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_BRANCH = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_EMAIL_USERID = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_EMAIL_USERID = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_EMAIL_USERID = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_ENV = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_ENV = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_ENV = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_FAX = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_FAX = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_FAX = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_FILLNTC = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_FILLNTC = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_FILLNTC = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_FSTNAM = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_FSTNAM = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_FSTNAM = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_JOBFUNC = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_JOBFUNC = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_JOBFUNC = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_LANG = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_LANG = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_LANG = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_LSTDTE = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_LSTDTE = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_LSTDTE = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_LSTNAM = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_LSTNAM = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_LSTNAM = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_MENU = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_MENU = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_MENU = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_MIDDLE_INIT = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_MIDDLE_INIT = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_MIDDLE_INIT = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_NAME = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_NAME = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_NAME = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_NAME_PREFIX = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_NAME_PREFIX = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_NAME_PREFIX = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_NAME_QUALIFIER = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_NAME_QUALIFIER = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_NAME_QUALIFIER = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_PHONE = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_PHONE = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_PHONE = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_PIN = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_PIN = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_PIN = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_SCMPIN = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_SCMPIN = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_SCMPIN = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_SUPER = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_SUPER = 'DEMO' 3 ln_sql= select count(*) from retail.env where EN_SUPER = 'DEMO' 4 ln_sql= select count(*) from retail.env where EN_WEBSITE = 'DEMO' 2 ln_sql= select count(*) from retail.env where EN_WEBSITE = 'DEMO' 5 ln_sql= select count(*) from retail.env where EN_WEBSITE = 'DEMO' PL/SQL procedure successfully completed.
Code:Procedure created. No errors. 1 ln_sql= 2 ln_sql= 3 ln_sql= PL/SQL procedure successfully completed.


Reply With Quote

Bookmarks