同じ(ただし不明な)行タイプの2つの行から違いを抽出するOracle関数を構築しようとしています。最終的な目標は、:NEW と :OLD を COLUMN_NAMES とともに汎用関数に送信するトリガーで変更を収集することです。
例として、関数に (最初の 2 つのパラメーターとして) 行を渡すことができるテーブルの例を 3 つ挙げました。
TABLE_A TABLE_B TABLE_C
------- ------- -------
ID number(12) ID number(12) ID number(12)
NAME varchar2(30) FNAME varchar2(30) CATEGORY number(12)
DESC varchar2(100) LNAME varchar2(30) FAMILY number(12)
PHONE varchar2(24) ACCEPTANCE date
DESC varchar2(200)
2 つのオブジェクトには同じ番号または列 (#C など) の 1 つの行が含まれ、3 つ目のオブジェクトには TABLE 名が含まれることが既にわかっているため、最終的に次の関数仕様になりました。
create or replace type COL_MODIFIED is object
(
COLUMN_NAME varchar(40),
VALUE_A varchar2(4000),
VALUE_B varchar2(4000),
VALUE_TYPE VARCHAR(15),
)
/
create or replace type COLS_MODIFIED as table of COL_MODIFIED
/
function GET_MODIFS(vROW_A object, vROW_B object, vTABLE_NAME varchar2)
return COLS_MODIFIED is
begin
<code attempts were so numerous>
end EXTRACT_CHANGES;
私が実際にやろうとしていることは次のとおりです。3行(パラメータ)の値を並べてCOL_MODIFIED行のテーブル(説明どおり)を返します。例として、TABLE_B の行を使用する場合、出力として期待されるものは次のとおりです。
COLUMN_NAME | VALUE_A | VALUE_B | VALUE_TYPE
---------------------------------------------------------
'LNAME' | '' | 'TORN' | 'VARCHAR2(30)'
'DESC' | 'partial' | '' | 'VARCHAR2(200)'
私はすでに VALUE_TYPE を取得する方法を知っており、3 行を横に並べて出力する多くの方法を試しましたが、まだできていません...
ヘルプ、参照リンク、ヒント (または解決策も!) をいただければ幸いです。