2011-09-26 67 views
-2

我将在我的数据库表中的新对象,但我一直在检索,指出一个例外....
PL/SQL异常翻译

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 

点都是可选的,所以不是真的需要。

+1

错误消息提到'EXCEPTION',你清理你的代码,删除'EXCEPTION',并可能是其周围的上下文。当您删除正在接受投诉的代码块时,我们应该如何提供帮助? –

+0

@Shannon Severance对不起,但我真正想要的是有人向我解释例外。与代码没有任何关系,因此名称为“例外翻译” – Kevin

回答

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; 

NB您应该添加一个异常部分来处理可能发生的常见异常,例如违反约束等

希望它可以帮助

+0

耶对不起,它最终返回一个值,但我并没有真正包含该部分。基本上在最后如果它抛出一个异常,然后返回一个负数,我没有包括,但是异常是什么意思? – Kevin

+0

您在函数声明中缺少关键字。你能发表实际的语法吗? – Ollie

3

的错误表明存在EXCEPTION关键字附近有语法问题。但是,您的代码大纲并不表示您的任何块都有异常部分。这使我们很难提供很多帮助。

在评论中,您似乎表明您的大纲中至少有一个块有异常部分。你能发布实际的代码吗(或者至少有一个更详细的大纲,包括任何异常块产生错误的语法)?

此外,在评论中,这听起来像您的函数中有一条RETURN语句返回某种状态代码。从函数中使用返回代码几乎总是一个错误 - 仅仅抛出一个异常(甚至更好,允许生成的异常传播)更健壮得多。在使用DML的PL/SQL中编写函数通常是一个错误 - 如果您正在执行DML,那么您几乎总是希望在某个过程中完成该功能。