2011-09-26 82 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,那麼您幾乎總是希望在某個過程中完成該功能。