如何在 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

Oracle APEX 交互式网格:如何使用 PLSQL 访问内容?

使用 ag-Grid 为每一行添加唯一的 id

如何在 MySQL 中为每个唯一列值选择两条记录作为一行?

如何在 APEX 4.1 中为单项表单创建更新流程