怎么在ORACLE FORMS中限制某字段记录的重复? 怎么在ORACLE FORMS中限制某字段记录的重复?比如:一张出货单,我要限制在同张出货单中不能出两个物品代号相同的货物,即避免重复出货。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果出货单明晰是一张表,并且包含货单ID,物品代号若干个字段,可以把这张表的主键设置为(货单ID,物品代号),既可用唯一性约束达到楼主的目的。 已经有主键了(货物id,和序号sub_no) 选择的时候可以使用distinct把相同的记录去掉或者干脆把这个逻辑处理做到应用层去。 这时我上午自己写的代码: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;但是在打一个物品时也报错。哪位大哥帮忙修改下,谢谢! 要不设置成主key,要不到后台去判断实在要达到那种效果,可以试试在插入一条记录前,做个触发器,进去检索如果有 就报错 oracle 传值的 sql语句怎么写????? oracle监听器无法启动问题 oracle 安装出问题 Oracle11G初体验小问题! 谁知道wavecom短信猫连接oracle的配置么? 网上全都是sqlserver和access的,求oracle的啊!! ora-01033:oracle的初始化或关闭正在进行中 alter session无效的问题 请教一个sql语句写法 我遇到了toad的启动问题,toad一闪就没了 Select子句嵌套效率优化问题,求教 两个查询语句连在一起 健值按日期和数字综合自增
可以把这张表的主键设置为(货单ID,物品代号),既可用唯一性约束达到楼主的目的。
或者干脆把这个逻辑处理做到应用层去。
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;但是在打一个物品时也报错。哪位大哥帮忙修改下,谢谢!
如果有 就报错