Вы должны использовать свой пользовательский считыватель ввода для получения более быстрых результатов, а не для извлечения первого символа из чтения строки. Ссылка для Custom ScanReader и объяснение: https://gist.github.com/nik1010/5a90fa43399c539bb817069a14c3c5a8
Код для сканирования Char:
BufferedInputStream br=new BufferedInputStream(System.in);
char a= (char)br.read();
Боюсь, вы ошиблись:
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;
или запустить форму в режиме отладки (не забудьте установить точку останова!) и проследить его исполнение.