2017-04-04 73 views
1

我创建了一个基本上是其他列的串联的列。我想要它做的是用来自当前用户填写的表单的信息进行更新。然而,现在它只是用最近的行(表中的记录)更新它自己,不仅如此,而且该列(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。

+0

您只会从您的查询中获得一行,并且降序排列MAIN_ID。这就是为什么你会得到17-C3或17-D4 – Rams

+0

那么,你认为我可以从当前填写的表单中获得信息? (主键生成为表格或行的方式已保存) – ruchithelamp

回答

2

而不是这样做是Apex,你可以在数据库中使用11g虚拟列语法。

alter table t23 
    add new_id as (YEAR || '-' || COL2|| PRIMKEY) 
; 

当您插入一行时,此列将自动填充。如果您的应用程序更新这三列中的任何一列,它将自动保留。它不能被覆盖。

这种方法的关键(哦!)优点是,用于维护NEW_ID的逻辑存在于一个表格声明中,然后应用表格填充。缺点是我们不能在INSERT语句中包含该列,因此必须始终使用显式投影来指定它们:insert into t23 (year, col2, primkey) values (....。但无论如何,这是一个很好的做法,所以不是一个主要的缺点。

+0

此代码是否应用于列的页面项目属性? – ruchithelamp

+0

不可以。这是对数据模型的更改。 – APC

相关问题