You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Forms 10g项目:已选科目从LOV过滤的SQL问题求助

Oracle Forms 10g LOV排除已选科目问题解决

首先你写的SQL存在语法错误:not in后面的括号未闭合,而且逻辑仅排除了当前行的subject_id,无法实现排除该班级所有已选科目的需求。以下是针对不同场景的正确解决方案:


场景1:已选科目已保存到数据库表

假设你有一个关联表(例如class_subjects)存储班级与科目的绑定关系(字段:class_id、subject_id),LOV的SQL应修改为:

select subject_name, subject_id
from   subject
where  subject_id not in (
    select subject_id
    from   class_subjects
    where  class_id = :class_info.CLASS_ID -- 替换为你表单中班级ID的字段名
)

如果subject_id可能存在NULL值,推荐用NOT EXISTS替代NOT IN(避免NULL导致的查询异常):

select s.subject_name, s.subject_id
from   subject s
where  not exists (
    select 1
    from   class_subjects cs
    where  cs.class_id = :class_info.CLASS_ID
    and    cs.subject_id = s.subject_id
)

场景2:已选科目仅在表单块中(未保存到数据库)

如果科目是在class_info块中新增的多行记录(尚未提交到数据库),需要排除块内所有已输入的subject_id,可以直接查询表单块数据:

select s.subject_name, s.subject_id
from   subject s
where  not exists (
    select 1
    from   class_info ci
    where  ci.class_id = :class_info.CLASS_ID -- 限定为当前班级
    and    ci.subject_id = s.subject_id
    and    ci.subject_id is not null -- 排除空行
)

额外注意事项

  • 确保class_info块的class_id字段已有值,否则无法区分不同班级的已选科目;
  • 调用LOV前可执行GO_BLOCK('class_info')确保块处于激活状态,避免字段引用异常;
  • 若表单支持多行输入,需确保块的Multi Record属性已设置为Yes。

内容的提问来源于stack exchange,提问作者X4r3X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:15:01