如何在Oracle Apex 5中为每一行唯一更新列?
我创建了一个基本上是其他列的串联的列。我想要它做的是用来自当前用户填写的表单的信息进行更新。然而,现在它只是用最近的行(表中的记录)更新它自己,不仅如此,而且该列(ID)中的所有行都是相同的(所有行都基于最近的行)。如何在Oracle Apex 5中为每一行唯一更新列?
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。
而不是这样做是Apex,你可以在数据库中使用11g虚拟列语法。
alter table t23
add new_id as (YEAR || '-' || COL2|| PRIMKEY)
;
当您插入一行时,此列将自动填充。如果您的应用程序更新这三列中的任何一列,它将自动保留。它不能被覆盖。
这种方法的关键(哦!)优点是,用于维护NEW_ID的逻辑存在于一个表格声明中,然后应用表格填充。缺点是我们不能在INSERT语句中包含该列,因此必须始终使用显式投影来指定它们:insert into t23 (year, col2, primkey) values (....
。但无论如何,这是一个很好的做法,所以不是一个主要的缺点。
此代码是否应用于列的页面项目属性? – ruchithelamp
不可以。这是对数据模型的更改。 – APC
您只会从您的查询中获得一行,并且降序排列MAIN_ID。这就是为什么你会得到17-C3或17-D4 – Rams
那么,你认为我可以从当前填写的表单中获得信息? (主键生成为表格或行的方式已保存) – ruchithelamp