2017-05-25 37 views
0

我試圖爲由嚮導創建的調查問卷創建自動遞增主鍵。問題在於,我需要在預渲染階段將主鍵插入頁面項目P2_ID(這是一個隱藏項目),以便我可以在問卷的每個部分上運行ARF過程,以允許員工回去並改變他們的答案。Oracle Apex 5:使用PL/SQL向頁面項插入值

我似乎無法使用觸發器,因爲它實現了提交,並且我希望PK在會話開始時填充。

目前,我有一個過程中運行的預渲染階段,這個PL/SQL代碼:

begin 
    select SEQ_UAT.nextval into :P2_ID from dual; 
end; 

但無論我做什麼,我似乎無法得到這個非常簡單的PL/SQL代碼來填充P2_ID頁面項目!

任何想法?

+0

調試日誌告訴你發生了什麼P2_ID? –

回答

0

感謝您的回答。

我能弄明白。基本上,我刪除了我運行的ARP並將其設置爲PL/SQL函數,這使我可以使用seq.nextval創建預渲染PL/SQL過程以創建PK。

不知道爲什麼,但似乎ARP只是不會與seq.nextval一起工作!

-1

不知道爲什麼這不起作用,但你可以使用MAX(pk_id)+1。如果你使用seq.nextval它會增加每次用戶刷新頁面等

編輯:你不能也只是設置:P2_id的源到SQL查詢和從那裏填充?

+1

我不同意你使用MAX + 1的能力,至少在多用戶環境中是這樣。這是一個錯誤,最終會導致重複鍵。這是爲什麼。在Oracle中,寫入不會阻止其他人從同一個表中讀取數據。但是直到提交之後,纔會從另一個會話中看到DML。所以會發生下面的情況:爲了簡化,我們假設表中的max pk是100.現在User1登錄並獲取session1,並且user2登錄並獲取session2。 – Belayer

+1

(續)現在,user1運行您的程序,獲取PK = 101並插入一行。但是,在提交用戶2運行該過程之前。用戶2也將獲得PK = 101。這可能需要很長時間,但最終會發生。 – Belayer