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

时间:2017-04-04 14:06:32

标签: sql oracle plsql oracle-apex oracle-apex-5

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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