我在oracle表单上的一个按钮中做了这个,从几个表记录中自动填写表单,当我运行表单时,它会抛出错误FRM - 40102 RECORD必须先输入或删除
我尝试先手动删除默认记录,但似乎没有改变。
DECLARE
/* cursor declaration */
CURSOR C IS
SELECT ALU.IDEALU, EVA.IDEEVA, UNI.IDEUNI, MAT.IDEMAT
FROM ALU, EVA, UNI, MAT
ORDER BY ALU.IDEALU;
ALT NUMBER;
R C%ROWTYPE;
N NUMBER;
errnum NUMBER := ERROR_CODE;
V_CONT NUMBER;
AL_CONT NUMBER;
V_ADD_AMT NUMBER;
V_ADD_DEDUCT NUMBER;
V_SAL_ADD_AMT NUMBER;
BEGIN
SELECT COUNT(IDEALU) INTO AL_CONT
FROM ALU;
/*cursor open*/
OPEN C;
--=================
IF errnum = 40508 THEN
ALT:=SHOW_ALERT('FAIL');
RAISE Form_Trigger_Failure;
END IF;
--================
GO_BLOCK('CAAE');
IF AL_CONT=0 THEN
FIRST_RECORD;
ALT:=SHOW_ALERT('FAIL');
ELSE
LAST_RECORD;
NEXT_RECORD;
END IF;
NEXT_RECORD;
LOOP
FETCH C INTO R; ----cursor fetch/read
:CAAE.CAAEALU:=R.IDEALU; --- data assign...
:CAAE.CAAEEVA:=R.IDEEVA;
:CAAE.CAAEUNI:=R.IDEUNI;
:CAAE.CAAEMAT:=R.IDEMAT;
EXIT WHEN C%NOTFOUND;
NEXT_RECORD;
END LOOP;
PREVIOUS_RECORD;
CLOSE C;
END;
答案 0 :(得分:1)
在您的代码中,您执行next_record 2次而不填写任何字段:
find
不需要if语句之后的next_record。 现在您尝试从空记录转到下一条记录,然后系统会为您提供首先填写的错误消息
答案 1 :(得分:0)
Next_Record中的问题;命令,您可以做的是检查以下每个next_record的条件是示例:
IF :SYSTEM.LAST_RECORD = 'TRUE' AND :CAAE.CAAEALU IS NOT NULL THEN
NEXT_RECORD;
END IF;
试试这个它会起作用,或者如果仍然出现任何问题则发表评论。