2009-05-28 1 views
1

Мне нужно вызвать несколько различных процедур в пакете Oracle последовательно в рамках транзакции. Фактически, мне нужно называть их около 5000 раз. Мне было интересно, какой синтаксис я мог бы использовать для отправки этих вызовов в Oracle, поэтому мне нужно только одно путешествие туда и обратно. Я пробовалOracle: вызов нескольких процедур в пакете

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

но я возвращаюсь ORA00900: неверный оператор SQL.

Любые указатели? Я знаю о передаче массивов параметров в процедуры, но это вряд ли поможет в этом случае к сожалению.

ответ

2

Simplest - анонимный блок PL/SQL. 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; 
/

Тогда вы можете пойти дополнительный шаг и фактически создать это как процедура в БД, а просто вызвать процедуру. PS. Слэш в конце говорит SQL * Plus или SQL Developer выполнить код. Это зависит от того, что вы используете для запуска SQL.

0

И нести сеть в оба конца для каждого звонка? Похоже на смерть. Возможно, лучше переписать хранимую процедуру, чтобы вы могли сократить сетевой трафик.

+0

Нет, я хочу провести их в один раунд. –