pl/sql spool EXECUTE IMMEDIATE
701887Jan 13 2012 — edited Jan 13 2012Hi,
I would like to spool 7 different files in combination with execute immediate in one run. The script is
DECLARE
TELLER_1 INTEGER:=3;
ctt1 varchar(2000);
BEGIN
FOR TELLER_1 IN 3..10
LOOP
ctt1 := '
SPOOL ''F:\A1_W'||TELLER_1||'_KANS.TXT''
SELECT
WORP_XW || ''|''||
D || ''|''||
V5_AANTAL_KANS || ''|''||
V5_AVG_KANS || ''|''||
V6_AANTAL_KANS || ''|''||
V6_AVG_KANS || ''|''||
V7_AANTAL_KANS || ''|''||
V7_AVG_KANS || ''|''||
V8_AANTAL_KANS || ''|''||
V8_AVG_KANS || ''|''||
V9_AANTAL_KANS || ''|''||
V9_AVG_KANS
FROM
(
select WORP_XW,D, V5_AANTAL_KANS,ROUND(V5_AVG_KANS,6) V5_AVG_KANS, V6_AANTAL_KANS, ROUND(V6_AVG_KANS,6) V6_AVG_KANS,
V7_AANTAL_KANS,ROUND(V7_AVG_KANS,6) V7_AVG_KANS, V8_AANTAL_KANS, ROUND(V8_AVG_KANS,6) V8_AVG_KANS,
V9_AANTAL_KANS,ROUND(V9_AVG_KANS,6) V9_AVG_KANS
from
(
select WORP_XW,D, KANS,
case VERSIE_VX when ''V5''then 5 when ''V6''then 6 when ''V7''then 7 when ''V8''then 8 when ''V9'' then 9 end as VERSIE_VX
from VMENS.TOEVAL_BASIS_W'||TELLER_1||'
)
pivot (
AVG(KANS) as AVG_KANS,
COUNT(KANS) AS AANTAL_KANS
for VERSIE_VX IN( 5 as V5 , 6 as V6, 7 as V7, 8 as V8, 9 as V9 )
)
ORDER BY D
)';
EXECUTE IMMEDIATE ctt1;
dbms_output.put_line(ctt1);
END LOOP;
END;
when a run this script i've got error stement:
ORA-00900: Ongeldige SQL-statement.
ORA-06512: in row 42
row 42 is the row where the 'pivot (' starts.
When I run this script without the 'EXECUTE IMMEDIATE ctt1' statement then everything is oke.
SPOOL 'F:\A1_W3_KANS.TXT'
SELECT
WORP_XW || '|'||
D || '|'||
V5_AANTAL_KANS || '|'||
V5_AVG_KANS || '|'||
V6_AANTAL_KANS || '|'||
V6_AVG_KANS || '|'||
V7_AANTAL_KANS || '|'||
V7_AVG_KANS || '|'||
V8_AANTAL_KANS || '|'||
V8_AVG_KANS || '|'||
V9_AANTAL_KANS || '|'||
V9_AVG_KANS
FROM
(
select WORP_XW,D, V5_AANTAL_KANS,ROUND(V5_AVG_KANS,6) V5_AVG_KANS, V6_AANTAL_KANS, ROUND(V6_AVG_KANS,6) V6_AVG_KANS,
V7_AANTAL_KANS,ROUND(V7_AVG_KANS,6) V7_AVG_KANS, V8_AANTAL_KANS, ROUND(V8_AVG_KANS,6) V8_AVG_KANS,
V9_AANTAL_KANS,ROUND(V9_AVG_KANS,6) V9_AVG_KANS
from
(
select WORP_XW,D, KANS,
case VERSIE_VX when 'V5'then 5 when 'V6'then 6 when 'V7'then 7 when 'V8'then 8 when 'V9' then 9 end as VERSIE_VX
from VMENS.TOEVAL_BASIS_W3
)
pivot (
AVG(KANS) as AVG_KANS,
COUNT(KANS) AS AANTAL_KANS
for VERSIE_VX IN( 5 as V5 , 6 as V6, 7 as V7, 8 as V8, 9 as V9 )
)
ORDER BY D
);
Of course it's easy to run tis script 7 times. But i would like to understand the reason why this scripts give a error. Enybody Knows why?
Michiel van Mens