我正在尝试构建一个 Oracle 函数来从相同(但未知)行类型的 2 行中提取差异。最终目标是收集触发器上的更改,将 :NEW 和 :OLD 与 COLUMN_NAMES 发送到通用函数。
例如,我列出了 3 个示例表,其中的行(作为前 2 个参数)可以传递给我的函数:
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 个对象将包含 1 行具有相同数量或列(例如 #C),而第 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;
事实上,我尝试做的是:返回一个 COL_MODIFIED 行的表(如所述),并排显示 3 行(参数)的值。例如,如果我们使用 TABLE_B 中的一行,这是我期望的输出:
COLUMN_NAME | VALUE_A | VALUE_B | VALUE_TYPE
---------------------------------------------------------
'LNAME' | '' | 'TORN' | 'VARCHAR2(30)'
'DESC' | 'partial' | '' | 'VARCHAR2(200)'
我已经知道如何获取 VALUE_TYPE 并尝试了多种方法来输出并排列中的 3 行,但还没有...
任何帮助、参考链接、提示(甚至解决方案!)将不胜感激!