Oracle Apex-出现虚拟列错误

凯瑟琳·里德

我当前正在使用Oracle Application Express 18.1.0.00.45,但遇到了我不理解的错误。

我使用以下查询创建了一个交互式网格:

select periodic_topics_id, filter, topic,
CASE 
WHEN LINK1 like '%116%' then LINK1||:APP_SESSION 
ELSE LINK1
END AS LINK1
From periodic_topics
where meeting like :P31_MEETING_DESC
and
(nvl(:P31_FILTER,'0') = '0' or instr(:P31_FILTER||':',filter||':') > 0) 

在数据库的表中,periodic_topics_id列是主键,当使用以下触发器向表中添加新行时,它将自动填充:

create or replace TRIGGER periodic_topics_trigger
BEFORE INSERT ON periodic_topics
FOR EACH ROW
BEGIN
:new.periodic_topics_id := periodic_topics_seq.nextval;
END;

在APEX应用程序中,link1是一个文本字段,在此列的属性的“ Link”部分中,“ Target”的类型为URL,URL为&LINK1。我还在APEX应用程序中指出,periodic_topics_id是主键。这些是我指的链接列的属性:

在此处输入图片说明

问题:当我在交互式网格的“ LINK1”列中的单元格中手动插入一个值时,会出现错误消息:

“•Ajax调用返回了服务器错误ORA-20987:执行DML命令时,APEX-处理'定期主题-保存交互式网格数据'引发'ORA-01733:此处不允许使用虚拟列。如果基于列,则可能发生此错误。在聚合或SQL表达式上。将列属性“仅查询”设置为“是”以从INSERT和UPDATE语句中排除该列。-与您的应用程序管理员联系。

但是,如果我使用相同的查询创建交互式网格,但没有case语句,那么在交互式网格中添加链接就没有问题。没有错误发生。换句话说,如果我使用以下查询创建交互式网格,则尝试将值添加到交互式网格的“ Link1”列中时,不会发生错误:

select periodic_topics_id, filter, topic, link1
From periodic_topics
where meeting like :P31_MEETING_DESC
and
(nvl(:P31_FILTER,'0') = '0' or instr(:P31_FILTER||':',filter||':') > 0)

仅供参考,我需要查询以包含case语句,因为某些链接会将用户定向到外部网站,而其他链接会将用户定向到应用程序中的另一个页面。如果没有case语句将:APP_SESSION连接到该链接,则当用户单击将其定向到应用程序另一页面的链接时,该用户将被迫重新登录该应用程序。

有谁知道为什么case语句在查询中而不是case语句不在查询中时会发生错误?

先感谢您。

小脚丫

我的看法是,这是一个已知问题,可以追溯到表格形式(TF)(而交互式网格(IG)是其高级版本)。据我所知,您无法/无法使用具有联接或伪造的查询来创建TF / IG-您使用进行了创建CASE为什么?因为Apex在知道如何操纵此类数据方面有困难。

联接通常用于诸如Scott的EMP表之类的情况,当您希望将DEPTNO连同部门名称(DNAME)一起显示时,但它存储在DEPT表中。加入是很自然的选择,但行不通。解决方案是创建一个返回此类值的函数。而且,当然,它不能进入的

同样,在您的情况下,您实际上可以使用CASE,但必须将其设置为“仅查询”(如建议的那样),并将其用于显示目的然后,您必须具有可输入的“原始” LINK(数据库)列。

基本上,布局看起来像这样:

PERIODIC_TOPICS_ID  FILTER  TOPIC  LINK  LINK_DESCRIPTION
------------------  ------  -----  ----  -------------------------
<-------  enterable columns  --------->  <- your CASE construct ->

用户可以单击LINK_DESCRIPTION列,该链接会将他们带到URL,而您将使用LINK输入/更新该列的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章