Oracle Apex 5:使用PL/SQL向页面项插入值

问题描述:

我试图为由向导创建的调查问卷创建自动递增主键。问题在于,我需要在预渲染阶段将主键插入页面项目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? –

感谢您的回答。

我能弄明白。基本上,我删除了我运行的ARP并将其设置为PL/SQL函数,这使我可以使用seq.nextval创建预渲染PL/SQL过程以创建PK。

不知道为什么,但似乎ARP只是不会与seq.nextval一起工作!

不知道为什么这不起作用,但你可以使用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