如何解决 Oracle Apex 中的无效列错误?

Posted

技术标签:

【中文标题】如何解决 Oracle Apex 中的无效列错误?【英文标题】:How to resolve invalid column error in Oracle Apex? 【发布时间】:2020-05-16 13:44:40 【问题描述】:

我正在尝试添加一个 plsql 脚本,该脚本将在表单中按下“应用更改”按钮后更新事件。所以我添加了一个新的“动态操作”来单击该按钮的事件,将操作设置为“执行 PL/SQL 代码”并在“PL/SQL 代码”部分编写以下脚本

BEGIN
UPDATE EVENT
SET START_DATE = :P53_START_DATE,
END_DATE = :P53_END_DATE,
START_TIME = :P53_START_TIME,
END_TIME = :P53_END_TIME,
DESCRIPTION = :P53_DESCRIPTION,
WHERE EVENT_ID = :P53_EVENT_ID;
END;
/

但是当我点击“应用更改”时,我不断收到此错误

我使用“P53_.....”从字段中选择值的方式有什么问题吗?

我该如何解决这个问题?

【问题讨论】:

您好 Samman,您不需要末尾的“/”。那就是在 sql Workshop 或 sqlplus 等命令行环境中执行你的 pl/sql。在顶点它是不需要的。附带说明...如果用户点击“应用”,则“动态操作”不是逻辑操作。提交页面并将此代码放入提交时的页面进程中会更有意义。 另外我强烈建议您使用“TO_DATE(:P53_END_DATE, '')”来确保正确解释日期。在 apex 中,日期只是一个字符串,因此您需要告诉数据库日期以什么格式传递...不仅适用于结束日期,还适用于您正在使用的任何日期字段 【参考方案1】:

您的更新语句引用:P53_NEW.EVENT_NAME 表列START_DATE。那是不对的。用正确的变量替换它。

【讨论】:

在发布之前对我的代码进行了一些试验。我一定忽略了它。我会更新我的问题。【参考方案2】:

这段代码有几个问题:

BEGIN
UPDATE EVENT
SET START_DATE = :P53_START_DATE, << suggest using TO_DATE(:P53_START_DATE,'<your date format mask>') instead
END_DATE = :P53_END_DATE, << suggest using TO_DATE(:P53_END_DATE,'<your date format mask>') instead
START_TIME = :P53_START_TIME,
END_TIME = :P53_END_TIME,
DESCRIPTION = :P53_DESCRIPTION, << this comma makes statement fail
WHERE EVENT_ID = :P53_EVENT_ID; 
END;
/ << trailing slash not needed

但正如我在 cmets 中所说,您确定需要为此进行动态操作吗?在页面提交上执行任何操作的“***方式”是在提交时在页面进程中执行 pl/sql 代码。如果需要在不提交案例的情况下执行代码,则可以使用动态操作。这只是一个评论,与您的实际问题无关。

--柯恩

【讨论】:

我按照您的建议对代码进行了更改,但没有任何反应。既不会更新事件,也不会显示错误。我想一定是因为我没有在“items to Submit”中选择p53_event_id。但是当我这样做时,会发生一个错误,它只是说“错误”而已。我不知道我该怎么办? 我之前确实按照您的建议尝试过使用流程。但我使用相同的 from 来插入和更新条目。因此,我对如何将每个进程绑定到各自的表单提交(创建或更新)感到困惑。或许您可以提供帮助,也感谢您的意见。 您可以使用“按下按钮时”条件来执行此操作。 请使用 apex 调试器调试您的代码。这表明正在发生(或未发生)。您最适合调试自己的代码。 P53_EVENT_ID 绝对必须在“提交的项目”中。 回复“如何将进程绑定到相应的表单提交”:有多种处理方式。您可以为每个按钮创建一个进程,或者为每种情况使用“按下按钮时”。或者您可以使用 REQUEST 参数,该参数将包含提交时的按钮名称并执行类似 IF :REQUEST = 'SAVE' THEN &lt;save code&gt; ELSIF :REQUEST = 'CREATE' THEN &lt;insert code&gt; END IF 的操作。强烈建议您花一些时间查看示例应用程序并观看一些基本视频,以便熟悉基本的顶点概念

以上是关于如何解决 Oracle Apex 中的无效列错误?的主要内容,如果未能解决你的问题,请参考以下文章

我的一个 Oracle Apex 查询出现“无效标识符错误”

Oracle APEX 18 - 经典报告错误缓冲区小

Oracle Apex ORA-00922:缺少或无效选项

如何在 Oracle Apex 5 中为每一行唯一地更新列?

ORACLE APEX PL SQL 过程错误

如何从 Oracle Apex 的不同列属性页面中引用列的值?