我创建了一个基本上是其他列的串联的列。我想要它做的是用来自当前由用户填写的表单的信息更新自己。但是,现在它只是使用最新的行(表中的记录)自行更新它,不仅如此,而且此列中的所有行(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。
答案 0 :(得分:2)
Apex可以使用11g虚拟列语法在数据库中执行此操作,而不是这样做。
alter table t23
add new_id as (YEAR || '-' || COL2|| PRIMKEY )
;
插入行时,将自动填充此列。如果您的应用程序更新这三列中的任何一列,它将自动维护。它不能被覆盖。
这种方法的关键(哦!)优点是维护NEW_ID的逻辑存在于一个地方,即表声明,然而应用表填充。缺点是我们不能在INSERT语句中包含该列,因此必须始终使用显式投影指定它们:insert into t23 (year, col2, primkey) values (....
。但无论如何这都是好的做法,所以不是一个主要的劣势。