0

まず、LONGRAWは非推奨/悪/ひどい/使いにくいことを知っています。データベースのスキーマを制御できません。:)

私は現在、データベースからLONG RAW列を取得し、それをクライアント側で処理するプログラムを持っています。これはうまく機能しますが、私がやりたいのは、この処理をサーバーに移動して、さまざまなクライアントの状況で処理コードをさまざまな言語に翻訳する必要がないようにすることです。

だから私の現在のクエリは

SELECT t.ID, t.POINTS
  FROM TBL_DATAPOINTS t
 WHERE ...etc

その後t.POINTS、クライアントによって処理されます。

これをOracleプロシージャに移動しようとしましたが、LONG RAW列を使用できるもの(できればVARCHAR2)に変換する方法がわかりません。カーソルに取得した場合、各行を処理してから、処理されたデータとともにカーソルを返すにはどうすればよいですか?

私はそれをインラインで行うことはできません:

OPEN curData FOR
  SELECT t.ID, t.POINTS, fnProcessData(t.POINTS)
    FROM TBL_DATAPOINTS t
   WHERE ...etc

LONG RAWデータを関数に渡す際の制限のため(「LONGデータ型の不正使用」が発生します)。

カーソル内の生データを取得し、それをループして各行を処理できるのではないかと考えていましたが、カーソルの構造をその場で変更する方法(または変更するかどうか)がわかりません。

4

1 に答える 1

0

必要な処理によって異なります。LONG RAW を使用すると、ご覧のとおり非常に制限されます。可能であれば、TO_LOB() 関数を使用して行を一時テーブルに格納できます。この場合、値は BLOB 列としてアクセスされます (DBMS_LOB パッケージを確認してください)。

于 2013-01-04T06:12:29.693 に答える