Oracle frm-40735:当鼠标单击触发器引发未处理的异常ora-06502时

Oracle frm-40735:当鼠标单击触发器引发未处理的异常ora-06502时,oracle,error-handling,exception-handling,oracle10g,oracleforms,Oracle,Error Handling,Exception Handling,Oracle10g,Oracleforms,这是我为鼠标单击按钮上的触发器而编写的代码 declare a varchar2(20) := '&book_no'; b varchar2(20) := '&book_name'; c varchar2(20) := '&price'; d number(4) := '&no_of_books'; begin insert into book values (a,b,c,d); EXCEPTION when VALUE_ERROR then dbms_outp

这是我为鼠标单击按钮上的触发器而编写的代码

declare 
a varchar2(20) := '&book_no';
b varchar2(20) := '&book_name';
c varchar2(20) := '&price';
d number(4) := '&no_of_books';
begin
insert into book
values (a,b,c,d);
EXCEPTION
when VALUE_ERROR then
dbms_output.put_line('VALUE_ERROR exception raised');
end;
它编译成功,但当我运行它时,它显示:

frm-40735
:当鼠标单击触发器时引发未处理的异常
ora-06502

但当我显示错误时,它会说

最近没有遇到错误

同时,我在sqlplus上运行这个查询,它成功地运行了。
请尽快给我一个解决方案,我将非常感谢您。

这是表格;如果您打算像在SQL*Plus中那样使用符号(&),那么您就大错特错了,因为表单不是这样工作的。您应该创建表单,让用户填充其值,然后将这些值存储到数据库中

您得到的错误是因为您在一些数字列中插入字符串;最明显的是价格——也就是说,很可能是一个数字数据类型列,您将&PRICE放入其中

最常用的方法是使用数据块向导,将数据块建立在BOOK表的基础上,表单将为您创建所有内容—您只需运行表单,将一些值放入这些项并提交即可

现在的做法是,您似乎希望使用一个控制块,即不基于底层数据库对象(如表或视图)的控制块,因此您必须创建自己的插入逻辑-我建议您不要这样做。但是,如果您坚持,那么触发器将如下所示:

begin
  insert into book
    values (:a, :b, :c, :d);

EXCEPTION
  when VALUE_ERROR then
    message('VALUE_ERROR exception raised');
    raise form_trigger_failure;
end;
  • 引用带有冒号的项目(我还建议您始终使用块和项目名称引用它们,例如
    :block.item\u name
  • DBMS_OUTPUT.PUT_行在窗体中不起作用