変数を使用してレコード、オブジェクト、または参照カーソルを定義したUser- の動的アクセス・メンバーにアクセスする方法はありますか?例えば。 PL/SQLのユーザー定義オブジェクトのメンバーに動的にアクセスする
get_member(my_object, 'member name');
ような何かそれとも
my_object.$'member name';
それは私の手順の範囲内で動作しないようIMMEDIATEが動作しませんEXECUTE。
私が達成しようとしていることを巧みに説明しましょう。私はテーブルAのレコードをテーブルBのレコードに変換する方法を記述したマッピングテーブルMを持っています。マッピングはAのレコードの特定のタイプ(Aタイプによって与えられる)によって変わる必要があります。私はこのようなマッピング何かを実行したい(ない正確には、ストリーム関数内のマッピング・ロジックをカプセル化することを計画したが、原理は同様のまま):
SELECT
...
CASE
WHEN M.field_1_mapping IS NOT NULL THEN
-- column of A given by value of M.field_1_mapping
ELSE
null -- field_1 not filled for record type
END field_1,
--- etc.
FROM
table_a A,
mapping_table M
WHERE
A.TYPE = M.TYPE
だから私の質問は、私はこれを行う方法です。各レコード・タイプごとに異なる動的SQLを使用することはできませんが、マッピング・フィールドの値に基づいて列を選択できる場合、obovemention SQLは機能します。
私は、PL/SQLの設計理念に反する可能性があることを理解しています。その場合、この問題の解決方法についてお考えの場合は、歓迎します。
P.S:私は:それは単にハードコードマッピング機能例えばすることが可能であろうと仮定
FUNCTION get_field(field_key IN VARCHAR(32), a NOCOPY IN table_a%rowtype) RETURN VARCHAR(2000) IS
out VARCHAR2(2000)
BEGIN
-- ...
IF field_key = 'field_1' THEN
RETURN a.field_1; END IF;
-- ..
END;
しかし、それは本当に洗練ようです。
ええ、それは約行くための方法ですそれ。マッピングテーブルを再構築する必要があり、列順やデータ型チェックなどの改良が必要になります。これをparellizeする方法がありますか? – aggergren