小编Kat*_*eed的帖子

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) 
Run Code Online (Sandbox Code Playgroud)

在数据库的表中,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;
Run Code Online (Sandbox Code Playgroud)

在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) …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-apex oracle-apex-5 oracle-apex-5.1

5
推荐指数
1
解决办法
988
查看次数

Oracle Apex - 我应该使用 Empty_BLOB() 还是 null?

我目前使用的是 Oracle Apex 5.1.2。

我在数据库中创建了一个表,其中包含一个可以保存 BLOB 数据类型的列、一个文件名列和一个 MIME 类型列。

在我的 APEX 应用程序中,我有一个文件浏览页面项。此页面项的目的是允许最终用户将文件附加到页面。这部分工作完美 - 用户可以使用该项目浏览文件并将其附加到页面,然后下载该文件以查看它。

问题:我希望最终用户能够在需要时删除附件,并且如果他们愿意,可以在其位置附加另一个文件。我的想法是创建一个按钮,并在按钮的设置中将操作设置为“提交页面”,将数据库操作设置为 SQL 更新操作。然后,我将创建一个 PL/SQL 代码类型的页面进程,并在设置中设置服务器端条件,以便按下我创建的按钮时发生该进程。在该过程的 PL/SQL 代码部分,根据我所做的研究,我有以下两个选项之一:

UPDATE table_name
SET blob_column = EMPTY_BLOB()
WHERE my_id = id
Run Code Online (Sandbox Code Playgroud)

或者:

UPDATE table_name
SET blob_column = null
WHERE my_id = id
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这两个选项并且它们都有效,但我不知道哪个选项更适合我想要实现的目标。我试图研究这个问题,但不幸的是我找不到我正在寻找的确切答案。有人有什么建议吗?

先感谢您。

oracle oracle-apex oracle-apex-5 oracle-apex-5.1

4
推荐指数
1
解决办法
1万
查看次数

Oracle Apex - 下载 CSV 生成空报告

我目前在运行 Windows 10 的计算机上的 Internet Explorer 上使用 Oracle Apex 版本 18.2.0.00.12。

我在将交互式网格下载为 CSV 文件时遇到问题。

在我的 Apex 页面上,我有一个交互式网格和三个页面项目。其中两个页面项目 P200_DATE_FROM 和 P200_DATE_TO 是日期选择器项目。另一项是名为“提交”的按钮,其操作是“提交页面”。

这是我的交互式网格的查询:

select * from kat_test
where repairdate between :P200_DATE_FROM and :P200_DATE_TO;
Run Code Online (Sandbox Code Playgroud)

交互式网格中有四列:

问题 - Varchar2

月 - 数字

周 - 数字

维修日期 - 日期

我在交互式网格中更改的唯一设置是标题和 SQL 查询。

我将 P200_DATE_FROM 的源更改为返回当月第一天的 PL/SQL 表达式。它设置为“仅当会话状态中的当前值为空时”使用。表达式为:

trunc(last_day(sysdate)-1, 'mm')
Run Code Online (Sandbox Code Playgroud)

我更改了返回当前日期的 P200_DATE_TO PL/SQL 表达式的源。它还设置为“仅当会话状态中的当前值为空时”使用。表达式为:

sysdate
Run Code Online (Sandbox Code Playgroud)

当我运行页面时,它完全按预期加载,因为 P200_DATE_FROM 页面项目填充了当月的第一个日期,P200_DATE_TO 项目填充了当前日期,并且交互式网格显示了正确的数据。

问题:当我选择操作 -> 下载 -> CSV 时,CSV 文件会下载并作为 Excel 文件打开,但只显示标题名称。标题下方的单元格都是空的。但是,如果我更改 P200_DATE_FROM 页面项目和/或 P200_DATE_TO 页面项目中的日期之一(或两者),然后按提交按钮,页面将被提交,然后当我单击操作 -> 下载 -> …

oracle oracle-apex oracle-apex-5 oracle-apex-5.1

3
推荐指数
1
解决办法
2662
查看次数

Oracle SQL-为什么从双中选择to_char(to_date('31 -DEC-18'),'YYYY-IW');返回2018-01?

使用Oracle SQL时,为什么选择语句

select to_char(to_date('31-DEC-18'), 'YYYY-IW') 
from dual;
Run Code Online (Sandbox Code Playgroud)

返回“ 2018-01”?

我了解'IW'使用的是我想要使用的ISO标准,但是据我的研究可知,根据ISO标准,2018年12月31日发生在2019年的第1周。所以我理解为什么select语句为“ IW”返回“ 01”,但是为什么它为“ YYYY”返回“ 2018”?语句不应该返回'2019-01'吗?

对于我正在使用的数据,最好使用IW而不是WW。

sql oracle

0
推荐指数
1
解决办法
67
查看次数