0

テーブルのBLOBフィールドを読み取り、別のプロシージャのテンプレートとして使用されるRTFドキュメントを書き込むプロシージャを開発しようとしていますが、プロシージャがselectステートメントを起動すると、ORA-06502エラーが発生します。 。

ドキュメントを読んだ後のこのエラーは、フィールド間の非互換性(数値または値のエラー文字列)が原因で発生します

しかし、私はインターネットのいたるところにこの例を見てきました、そして私はそれを引き起こしているものの考えを使い果たしています。

私の手順のソースコードは次のとおりです。

PROCEDURE p_transfer_db_client(pcPath IN VARCHAR2,
                               pnSequence IN NUMBER) IS

   v_src_blob BLOB;
   v_file UTL_FILE.FILE_TYPE;
   v_offset INTEGER := 1;
   v_amount BINARY_INTEGER := 32766;
   v_binary_buffer RAW(32767);

BEGIN

   SELECT model 
     INTO v_src_blob
     FROM models
    wHERE id = pnSequence;

   v_file := UTL_FILE.FOPEN(pcPath, 'model.rtf', 'wb', v_amount); 

   LOOP
      BEGIN
          DBMS_LOB.READ(v_src_blob, v_amount, v_offset, v_binary_buffer);
          UTL_FILE.PUT_RAW(v_file, v_binary_buffer);
          v_offset := v_offset + v_amount;
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
               EXIT;
      END;
   END LOOP;

   UTL_FILE.FFLUSH(v_file);
   UTL_FILE.FCLOSE(v_file);

END p_transfer_db_client;
4

1 に答える 1

0

編集:あなたがこの質問に。のタグを付けているのを見たことがありませんでしたforms

コードはフォーム内では機能しません。UTL_FILEとDBMS_LOBはフォームクライアントではなくDBサーバーで実行されるため、フォームプロシージャではなくPL/SQLプロシージャで実行する必要があります。

BLOBデータ型がフォームでこのように管理されていないことは間違いありません。実際、コンパイルすら驚いています。

たとえば、フォーム内のBLOBを処理する方法を示すこの例を見てください。フォームを介して直接ではなく、PLSQLプロシージャ内でBLOBを定義およびクエリする必要があることがわかります。

DB内にPLSQLパッケージとしてプロシージャを作成し、フォームクライアントからこのパッケージを呼び出すことをお勧めします。


他に何かが起こっています。SELECTステートメントが機能しない理由がわかりません。

すべての変数宣言と次のすべてのステートメントをコメントアウトした場合でも、エラーが発生しますか?

SQL> create table models (
  2     inst_num_instituicao NUMBER(2) not null,
  3     id                   NUMBER(3) not null,
  4     model                BLOB not null);

Table created.

SQL> insert into models values (1, 1, hextoraw('FFFF'));

1 row created.

SQL> declare
  2     b blob;
  3  begin
  4     select model into b from models where id = 1;
  5  end;
  6  /

PL/SQL procedure successfully completed.
于 2012-10-29T15:39:48.077 に答える