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:
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 2:
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.
Script 3:
Code:
Procedure created.
No errors.
1 ln_sql=
2 ln_sql=
3 ln_sql=
PL/SQL procedure successfully completed.