Oracle: вызов нескольких процедур в пакете - PullRequest
1 голос
/ 29 мая 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 29 мая 2009

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 голосов
/ 29 мая 2009

А несете ли вы в оба конца сеть за каждый звонок? Звучит как смерть для исполнения. Может быть, лучше переписать сохраненный процесс, чтобы сократить сетевой трафик.

...