Oracle APEX输入ID时实时校验数据库存在性的实现方法
实现Oracle APEX实时校验唯一ID存在性的方法
正确的动态动作配置步骤
- 创建动态动作:在页面设计器中,右键点击页面项
P3_PATIENT_NO,选择「创建动态动作」。 - 设置触发事件:
- 若要输入过程中实时校验,选择「Key Release」事件;若要在输入完成后校验,选择「Blur」(失去焦点)事件,后者性能更优。
- 可添加触发条件「页面项值不为空」,避免空值时发起无效请求。
- 配置服务器端条件:
- 类型选择「SQL查询返回行数大于0」,输入以下SQL语句:
(无需SELECT 1 FROM mr_files WHERE patient_no = :P3_PATIENT_NOINTO子句,服务器端条件仅需判断是否存在匹配记录,返回1即可,比COUNT(*)执行效率更高)
- 类型选择「SQL查询返回行数大于0」,输入以下SQL语句:
- 添加执行动作:
- 选择「显示警告」动作,设置警告消息为
This ID NO already exists.。 - 可选补充动作:添加「设置值」动作清空
P3_PATIENT_NO,或添加「设置页面项属性」动作将该项设为只读(直到用户输入有效ID)。
- 选择「显示警告」动作,设置警告消息为
- 确认执行时机:将动态动作的「执行时机」设为「当条件满足时」。
原SQL不生效的原因
你之前写的SELECT ... INTO :P3_PATIENT_NO是PL/SQL赋值逻辑,但服务器端条件需要的是判断式查询——它会执行查询并检查是否有返回行,而非执行赋值操作。当查询无匹配记录时,会抛出NO_DATA_FOUND异常,直接中断动态动作逻辑,导致无法触发提示。
内容的提问来源于stack exchange,提问作者Ziad Adnan
相关产品推荐
相关产品推荐

