如何在 Oracle Apex 5 中为每一行唯一地更新列?
Posted
技术标签:
【中文标题】如何在 Oracle Apex 5 中为每一行唯一地更新列?【英文标题】:How to update column uniquely for each row, in Oracle Apex 5? 【发布时间】:2017-04-04 14:06:32 【问题描述】:我创建了一个基本上是其他列串联的列。我想要它做的是使用来自用户当前填写的表单的信息来更新自己。但是,现在它只是用最近的行(表中的记录)更新它自己,不仅如此,而且该列(ID)中的所有行都是相同的(所有这些行都基于最近的行)。
DECLARE
ID VARCHAR2(40);
BEGIN
SELECT NEW_ID
INTO ID
FROM (SELECT YEAR || '-' || COL2|| PRIMKEY as NEW_ID
FROM TABLE
ORDER BY MAIN_ID DESC)
WHERE ROWNUM = 1;
RETURN ID;
END;
所以对于第 1、2、3 行,我希望 ID 为 17-A1、17-B2 和 17-C3。但是它们的所有 ID 行都是 17-C3。如果我添加一条记录(行)4,那么所有的 ID 行都将变为 17-D4。
【问题讨论】:
您只会从查询中得到一行,按 MAIN_ID 的降序排列。这就是您获得 17-C3 或 17-D4 的原因 那么您认为我如何从当前正在填写的表格中获取信息? (主键生成为表单或行保存的方式) 【参考方案1】:您可以在数据库中使用 11g 虚拟列语法代替 Apex 执行此操作。
alter table t23
add new_id as (YEAR || '-' || COL2|| PRIMKEY )
;
当您插入一行时,该列将自动填充。如果您的应用程序更新这三列中的任何一列,它将自动维护。它不能被覆盖。
这种方法的关键(哦,哦!)优点是维护 NEW_ID 的逻辑存在于一个地方,即表声明,并且在填充表时应用。缺点是我们不能在 INSERT 语句中包含该列,因此必须始终使用显式投影指定它们:insert into t23 (year, col2, primkey) values (....
。但无论如何,这是一种很好的做法,所以不是主要缺点。
【讨论】:
该代码是否应该用在该列的页面项属性中? 没有。这是对数据模型的更改。以上是关于如何在 Oracle Apex 5 中为每一行唯一地更新列?的主要内容,如果未能解决你的问题,请参考以下文章
在 Node.js 中为 postgres 表中的每一行以不同的间隔为每一行运行重复任务
如何将具有自动完成功能的文本字段限制为列表中的项目 - Oracle Apex 5