title image


Smiley Dynamisches SQL funktioniert nicht richtig (Oracle 10g)
Hi !



Ich bin gerade dabei ein bisschen mit PL/SQL anzueignen.

Hier wollte ich zum Üben einen anonymen block anlegen der über user_objects alle invaliden objecte in einem schema in einen cursor schiebt und diese objecte dann per dynamischen SQL nochmal compiliert werden.



Jedoch hab ich das Problem das wenn die recompilieren aus irgendwelchen Gründen fehlschlägt der block in den exception bereich springt.

somit werden alle anderen objecte nicht beachtet.



Ich hoffe ihr könnt mir helfen.



Grüsse & Danke

Birne





DECLARE

status varchar2(10) := 'INVALID';

stmt varchar(100) := 'select * from user_objects where status = :1';

stmt2 varchar(100);

obj_rec user_objects%rowtype;

TYPE obj_ref_type IS REF CURSOR;

obj_cur obj_ref_type;

BEGIN

OPEN obj_cur FOR stmt USING status;

dbms_output.put_line ('Objects Invalid: '|| obj_cur%ROWCOUNT);

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.

execute immediate stmt2;

END LOOP;

close obj_cur;

EXCEPTION

WHEN OTHERS THEN dbms_output.put_line ('Shit');

END;

/

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: