問題:
外部ソースからの固定長レコードである CLOB を含むテーブルがあります。1 ~ 5 の位置 = フィールド A、6 ~ 12 の位置 = フィールド B など。
そのレコード レイアウトを定義する別のテーブル (LayoutDefinition) があります。
FieldName = 'fieldA'
FieldStart = 1
FieldLength = 5
FieldName = 'fieldB'
FieldStart = 6
FieldLength = 6
CLOB からデータを取得し、それを「tableA_rec tableA%rowtype」などの %rowtype 変数に入れる必要があります。
大規模な case ステートメントを使用するルーチンを実装しました。LayoutDefiniton テーブルの各行のループは、CLOB の領域を tablea_rec のような適切な変数に移動します。
CASE LayoutDefiniton.FieldName
WHEN 'fieldA' THEN tablea_rec.fieldA:= SUBSTR(inputClob,LayoutDefiniton.FieldStart,LayoutDefiniton.FieldLength);
WHEN 'fieldB' THEN tablea_rec.fieldB:= SUBSTR(inputClob,LayoutDefiniton.FieldStart,LayoutDefiniton.FieldLength);
もちろん、これは非常に非効率的です。データを分解するレコードごとにレイアウトをループする必要があるからです。
私がやりたいことは、テーブルから適切な変数にデータを取得する動的SQL選択ステートメントを一度作成することです。たとえば、動的でない場合は次のようになります。
select substr(inputCLOB,1,5), substr(inputCLOB,6,6) into FieldA, fieldB from CLOBTable;
これは動的 SQL を使用して実行できますか?
もしそうなら、構文はどのようになりますか?