我在数据库表中插入一个新对象,但我一直在检索一个说明的异常....
ERROR:insertproperty:ORA-06553: PLS-103: Encountered the symbol "EXCEPTION" when expecting one of the following:
begin case declare exit for function goto if loop mod null
package pragma procedure raise return select separate type
update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
form table call close current define delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
ORA-06553: PLS-103: Encountered the symbol "EXCEPTION" when expec
但我所做的只是简单插入......
function insert(...)
begin
begin
select table_seq.nextval
into nextval
from dual
begin
insert into table(id, ....)
values(nextval,....)
end
end
end
这些点都是可选的,所以并不是真的需要。
答案 0 :(得分:3)
该错误表示EXCEPTION
关键字附近存在语法问题。但是您的代码大纲并未表明您的任何块都有异常部分。这使我们很难提供很多帮助。
在评论中,您似乎表明大纲中至少有一个块有一个例外部分。你可以发布实际的代码(或者至少是一个更详细的大纲,包括产生错误的异常块的语法)?
此外,在评论中,听起来你的函数中有一个RETURN
语句,它返回某种状态代码。使用函数的返回代码几乎总是错误的 - 简单地抛出异常(甚至更好,允许生成的异常传播)更加健壮。在PL / SQL中编写一个执行DML的函数通常是一个错误 - 如果你正在做DML,你几乎总是希望在一个过程中完成。
答案 1 :(得分:0)
您的函数未返回值。我想你想把它作为一个程序(并添加一些分号,一个“AS”关键字等。):
CREATE OR REPLACE
PROCEDURE insert_proc(...)
AS
BEGIN
begin
select table_seq.nextval
into nextval
from dual;
begin
insert into table(id, ....)
values(nextval,....);
end;
end;
END insert_proc;
如果您使用的是Oracle 11g,则可以省略对DUAL表的调用:
CREATE OR REPLACE
PROCEDURE insert_proc(...)
AS
BEGIN
insert into table(id, ....)
values(nextvatable_seq.nextval,....);
END insert_proc;
N.B。您应该添加一个例外部分来处理可能发生的任何常见异常,例如:约束违规等。
希望有所帮助