2017-04-04 62 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

相關問題