我有一个oracle apex报表,每次它获取两行。 我想突出显示两行中数据不同的所有列。 因此,当用户查看比较报告时,他不必浏览所有列即可确定数据已更改的地方。
我尝试查看apex功能和一些javascript代码,但无法可靠地做到这一点。
您可以在此处查看示例报告: https://apex.oracle.com/pls/apex/f?p=128616:8:109311280077805 :::::
转到页面“帮助我进行比较”
我要突出显示“福利名称”列,因为“福利名称”列中的数据不同。
答案 0 :(得分:0)
您可以使用分析功能“ LAG”来引用结果集中的上一行。 因此,一种可能的解决方案是(1)选择当前行的值和上一行的值,(2)比较2列并设置一个标志(仅在第2行中,因为这是您要突出显示的位置,( 3)在顶点使用突出显示来指示哪些列具有不同的值。有关示例,请参见下面的示例sql。
-- create tables
create table so_dummy_data (
id number generated by default on null as identity
constraint so_dummy_data_id_pk primary key,
name varchar2(100) not null,
email varchar2(100) not null
)
;
-- load data
insert into so_dummy_data (
id,
name,
email
) values (
1,
'John Doe',
'john.doe@mail.com'
);
insert into so_dummy_data (
id,
name,
email
) values (
2,
'John Doe',
'john.x.doe@mail.com'
);
commit;
WITH old_and_new AS
(SELECT
id,
name,
LAG(name,1)OVER(
ORDER BY
name
)AS new_name,
email,
LAG(email,1)OVER(
ORDER BY
1
)AS new_email,
row_number() over (order by 1) rn
FROM
so_dummy_data
)
SELECT
name,
CASE
WHEN rn = 1 THEN 'N'
WHEN name = new_name THEN
'N'
ELSE
'Y'
END AS name_changed,
email,
CASE
WHEN rn = 1 THEN 'N'
WHEN email = new_email THEN
'N'
ELSE
'Y'
END AS email_changed
FROM
old_and_new;
答案 1 :(得分:0)
如果表的ID为“ test”,则可以尝试在页面加载compareRows(document.getElementById('test'));
时调用此函数
功能主体:
function compareRows(table) {
var row1,row2, rows = table.rows;
var cell1,cell2;
var rowText;
row1=rows[1];
row2=rows[2];
cell1=row1.cells;
cell2=row2.cells;
for (var i=0; i<cell1.length; i++) {
if(cell1[i].textContent != cell2[i].textContent){
cell1[i].style.backgroundColor = "red";
cell2[i].style.backgroundColor = "red";
}
}
}