首页 > 解决方案 > Oracle APEX (v19.1.0.00.15) 不获取原始数据类型

问题描述

我有一个 id 字段类型为 guid/raw(32) 作为 FK 的表。我用页面向导创建了一个“向下钻取”页面。向导不会将此 id 字段放入编辑页面。我手动放置它,但生成的提取过程不会将值提取到其中。页面保存效果很好,包括这个字段。我还使用另一个手动插入但不同的字段类型来测试页面,它也可以工作。为了测试还创建了一个“带表格的报告”,它也很好用。它使用另一种方法,而不是获取过程。有什么技巧可以让它发挥作用吗?

标签: oracle-apexoracle-apex-19.1

解决方案


我能够重现此行为,但它似乎与其他区域一致,例如带有表单的报告。我想这可以用不同的方式来争论,因为 RAW 值不能真正显示,除非是一堆没有用的 1 和 0。您必须将值转换为 HEX 之类的值,而 APEX 不应该对如何完成有太多发言权。

我成功的一种解决方法是在表格顶部创建一个视图,该视图使用 RAWTOHEX 将 RAW 类型显式转换为 HEX。这是一个示例脚本:

create table p (
  id raw(16) default sys_guid() primary key,
  name varchar2(10) not null
);

create table c (
  id        raw(16) default sys_guid(),
  parent_id raw(16) not null
            constraint c_p_id_fk
            references p,
  name      varchar2(10) not null
);

declare

  l_p1_id raw(16);
  l_p2_id raw(16);
  l_p3_id raw(16);

begin

  insert into p (name) values ('p 1') returning id into l_p1_id;
  insert into p (name) values ('p 2') returning id into l_p2_id;
  insert into p (name) values ('p 3') returning id into l_p3_id;

  insert into c (parent_id, name) values (l_p1_id, 'c 1 p 1');
  insert into c (parent_id, name) values (l_p1_id, 'c 2 p 1');
  insert into c (parent_id, name) values (l_p2_id, 'c 3 p 2');
  insert into c (parent_id, name) values (l_p3_id, 'c 4 p 3');
  insert into c (parent_id, name) values (l_p3_id, 'c 5 p 3');
  insert into c (parent_id, name) values (l_p3_id, 'c 6 p 3');

end;
/

create view p_v
as
select rawtohex(id) as id,
  name
from p;

然后,我使用 ROWID 伪列而不是 PK 列创建了主详细信息页面,以便 PK 字段可以编辑(尽管我仍然不确定为什么要这样做)。


推荐阅读