我当前正在使用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 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)
我已经尝试过这两个选项并且它们都有效,但我不知道哪个选项更适合我想要实现的目标。我试图研究这个问题,但不幸的是我找不到我正在寻找的确切答案。有人有什么建议吗?
先感谢您。
我目前在运行 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 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。