2009-05-28 20 views
1

トランザクション内でOracleパッケージ内のさまざまなプロシージャを連続して呼び出す必要があります。実際、約5000回呼び出す必要があります。私はこれらの呼び出しをOracleにバッチ処理するためにどのような構文を使用できるのだろうかと思っていたので、往復が1回だけ必要です。私は試しました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; 
/

その後、あなたは余分なステップを行って、実際にDBの手順としてこれを作成し、簡単に手続きを呼び出すことができます。 PS。最後のスラッシュは、コードを実行するようSQL * PlusまたはSQL Developerに指示します。これは、SQLを実行するために使用しているものによって異なります。

0

また、コールごとにネットワークラウンドトリップが発生しますか。演奏に死のように聞こえる。あなたはネットワークトラフィックを削減することができるように格納されたprocを書き換える方が良いかもしれません。

+0

いいえ、1回の往復にまとめてください。 –

関連する問題