怎么在ORACLE FORMS中限制某字段记录的重复?比如:一张出货单,我要限制在同张出货单中不能出两个物品代号相同的货物,即避免重复出货。

解决方案 »

  1.   

    如果出货单明晰是一张表,并且包含货单ID,物品代号若干个字段,
    可以把这张表的主键设置为(货单ID,物品代号),既可用唯一性约束达到楼主的目的。
      

  2.   

    已经有主键了(货物id,和序号sub_no)
      

  3.   

    选择的时候可以使用distinct把相同的记录去掉
    或者干脆把这个逻辑处理做到应用层去。
      

  4.   

    这时我上午自己写的代码:PROCEDURE check_goods_red IS  row_count  NUMBER;                     --记录行数
      row_num    number;                        --所新建或修改记录行数
      v_goods_no erp.erp_draw_bill_detail.goods_no%type; --判断料号重复
      v_n       varchar2(2);
    BEGIN      
     --获取当前记录行数
     v_n :='Y';
     row_num := :system.trigger_record; 
      first_record;  
     loop
        row_count:=:system.trigger_record;   
        
        v_goods_no := :erp_draw_bill_detail.goods_no;
       GO_RECORD(ROW_COUNT + 1);
        loop
         --若料号相同
          if v_goods_no = :erp_draw_bill_detail.goods_no then
           message('同张领料单中料号不能相同!请改正。'||:erp_draw_bill_detail.goods_no);
          
           go_item('erp_draw_bill_detail.goods_no');
           v_n :='N';
           pause;       return;--返回
           --exit;
          end if;
        exit when :system.last_record = 'TRUE'; 
        next_record; 
        end loop;
        GO_RECORD(ROW_COUNT+1);  --用以最后一行记录判定
      exit when :system.last_record = 'TRUE';
      --返回外层循环记录
      GO_RECORD(ROW_COUNT);
      next_record;
      end loop;
      :PARAMETER.p_check :=v_n;
      commit_form;
      --返回当前记录  
      go_record(row_num);
    EXCEPTION WHEN OTHERS THEN NULL;  
    END;但是在打一个物品时也报错。哪位大哥帮忙修改下,谢谢!
      

  5.   

    要不设置成主key,要不到后台去判断实在要达到那种效果,可以试试在插入一条记录前,做个触发器,进去检索
    如果有 就报错