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

时间:2018-04-05 14:19:44

标签: oracle error-handling exception-handling oracle10g oracleforms

这是我为按钮上的when_mouse_click触发器编写的代码

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上运行此查询,它运行成功。 请尽快给我一个解决方案,我将非常感谢你。

1 个答案:

答案 0 :(得分:2)

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

你得到的错误是因为你在一些数字列中插入字符串;最明显的是PRICE - 也就是说,很可能是一个NUMBER数据类型列,而且你正在把它放在它的价格中。

最常用的方法是使用数据块向导,将块基于BOOK表,而Forms将为您创建所有 - 您只需运行表单,将一些值放入那些项目和提交。

您现在的方式,似乎您想要使用控件块,即不基于底层数据库对象的块(例如表或视图),所以你必须创建自己的INSERT逻辑 - 我建议你不要那样做。但是,如果你坚持,那么触发器将如下所示:

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_name
  • DBMS_OUTPUT.PUT_LINE无法在Forms
  • 中使用