Оператор вставки не распознает значения переменных - PullRequest
0 голосов
/ 03 марта 2019

Код на упаковке работает нормально.Из формы оракула я пытаюсь вставить новую запись в таблицу.

Сообщение об ошибке

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 голосов
/ 03 марта 2019

Боюсь, вы ошиблись:

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 равно нулю, тогда оно равно.

В зависимости от используемой версии форм вы можете (всегда) переписать код (для целей отладки) как

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;

илизапустите форму в режиме отладки (не забудьте установить точку останова!) и отследите ее выполнение.

...