2009-05-28 7 views
1

Je dois appeler successivement plusieurs procédures différentes dans un package Oracle au sein d'une transaction. En fait, je dois les appeler environ 5000 fois. Je me demandais quelle syntaxe je pourrais utiliser pour traiter ces appels à Oracle, alors j'ai seulement besoin d'un aller-retour. J'ai essayéOracle: Appel de plusieurs procédures dans un lot

PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5; 

mais je récupère ORA00900: instruction SQL non valide.

Des pointeurs? Je connais le passage de tableaux de paramètres à des procédures mais cela ne va pas beaucoup aider dans ce cas malheureusement.

Répondre

2

Le plus simple est un bloc PL/SQL anonyme. EG:

DECLARE 
    v_file_loc varchar2(100) := '....'; 
    v_file_name varchar2(100) := '....'; 
    v_text varchar2(4000); 
BEGIN 
    dbms_output.put_line('Starting file read'); 
    fp := UTL_FILE.FOPEN(v_file_loc,v_file_name,'r'); 
    LOOP 
     utl_file.GET_LINE(fp,v_text); 
     dbms_output.put_line(v_text); 
    END LOOP; 
    UTL_FILE.FCLOSE(fp); 
END; 
/

Ensuite, vous pouvez passer à l'étape supplémentaire et créer réellement comme une procédure dans le DB, et il suffit d'appeler la procédure. PS. La barre oblique à la fin indique SQL * Plus ou SQL Developer pour exécuter le code. Cela dépend de ce que vous utilisez pour exécuter le SQL.

0

Et d'effectuer un aller-retour réseau pour chaque appel? On dirait la mort à la performance. Peut-être préférable de réécrire le proc stocké afin que vous puissiez réduire le trafic réseau.

+0

Non, je veux les regrouper en un aller-retour. –

Questions connexes