title image


Smiley Re: Dynamisches SQL funktioniert nicht richtig (Oracle 10g)
Hallo Birne,



um bei einem Kompilierfehler für eines der Objekte trotzdem in der Schleife weitermachen zu können, musst du das Execute-Statement selbst wieder in einen Block einbetten:

...

loop

FETCH obj_cur INTO obj_rec ;

exit WHEN obj_cur%NOTFOUND;

dbms_output.put_line (SQL%ROWCOUNT ||' recompiled: Object :'|| obj_rec.object_type||': '||obj_rec.object_name);

stmt2 := 'ALTER '||obj_rec.object_type||' '||obj_rec.object_name||' compile';

dbms_output.put_line(stmt2); --Das dient nur dazu um zu sehen ob das Statement auch richtig zusammengebastelt wird.

BEGIN

execute immediate stmt2;

EXCEPTION

dbms_output.put_line('Kompilierfehler für: '||stmt2);

END;



END LOOP;

...



Bei einem Fehler bei execute wird dann die Exception im inneren Block ausgeführt und du bleibst in der Schleife.





Grüße



pegasus2



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: