包装上的代码可以正常工作。从oracle表单中,我试图将新条目插入表中。
错误消息
ORA-01400:无法将NULL插入(“ BUS”。“ BP_AUTH_CODE”。“ CODE”)
代码
Declare
v_bn varchar2(9);
v_bn_exists number;
v_has_auth_code number;
v_auth_code varchar2(9);
Begin
v_bn := :TAC.bn;
v_bn_exists := CG$BP_AUTH_CODE.bn_exists(v_bn);
if v_bn_exists = 1 then
.....
if v_has_auth_code = 1 then
...
else
v_auth_code := CG$BP_AUTH_CODE.make_auth_code;
--Error happening over here
insert into bp_auth_code (bn, code) values(v_bn, v_auth_code);
commit;
message(v_auth_code); -- I can see the value
end if;
else
....
end if;
End;
答案 0 :(得分:0)
恐怕你错了:
v_auth_code := CG$BP_AUTH_CODE.make_auth_code;
--Error happening over here
insert into bp_auth_code (bn, code) values(v_bn, v_auth_code);
commit;
message(v_auth_code); -- I can see the value
说“您可以看到价值”-不,您不能。
如果INSERT
失败,则Oracle引发ORA-01400错误,因此执行停止。 INSERT
后面没有任何执行,包括MESSAGE
调用。您可能无法知道其价值,但是-如果我是您,我会相信Oracle的价值。如果它说CODE
为空,则为空。
根据您使用的Forms版本,您可以(总是)以(出于调试目的)重写代码为
v_auth_code := CG$BP_AUTH_CODE.make_auth_code;
message(v_auth_code); -- now you'll see the V_AUTH_CODE value
insert into bp_auth_code (bn, code) values(v_bn, v_auth_code);
commit;
或以调试模式运行表单(请不要忘记设置断点!)并跟踪其执行。