插入语句无法识别变量值

时间:2019-03-03 12:18:56

标签: oracle oracle10g oracleforms

包装上的代码可以正常工作。从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;

1 个答案:

答案 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;

或以调试模式运行表单(请不要忘记设置断点!)并跟踪其执行。