2009-05-28 9 views
1

Ich muss eine Reihe von verschiedenen Prozeduren innerhalb eines Oracle-Pakets nacheinander innerhalb einer Transaktion aufrufen. Tatsächlich muss ich sie ungefähr 5000 Mal anrufen. Ich fragte mich, welche Syntax ich verwenden könnte, um diese Aufrufe an Oracle zu verteilen, also brauche ich nur eine Hin- und Rückfahrt. Ich habe versuchtOracle: Aufruf mehrerer Prozeduren in einem Batch

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

aber ich bekomme zurück ORA00900: ungültige SQL-Anweisung.

Irgendwelche Zeiger? Ich weiß über das Übergeben von Arrays von Parametern an Prozeduren, aber das wird in diesem Fall leider nicht viel helfen.

Antwort

2

Am einfachsten ist ein anonymer PL/SQL-Block. Beispiel:

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; 
/

Dann können Sie den zusätzlichen Schritt gehen und tatsächlich diese im DB, als ein Verfahren erstellen und einfach die Prozedur aufrufen. PS. Der Schrägstrich am Ende weist SQL * Plus oder SQL Developer an, den Code auszuführen. Es hängt davon ab, was Sie zum Ausführen des SQL verwenden.

0

Und eine Netzwerk-Round-Trip für jeden Anruf entstehen? Klingt wie der Tod nach Leistung. Es könnte besser sein, das gespeicherte Proc neu zu schreiben, damit Sie den Netzwerkverkehr reduzieren können.

+0

Nein, ich möchte sie zu einem Umlauf zusammenfassen. –

Verwandte Themen