まず、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データ型の不正使用」が発生します)。
カーソル内の生データを取得し、それをループして各行を処理できるのではないかと考えていましたが、カーソルの構造をその場で変更する方法(または変更するかどうか)がわかりません。