2011-09-26 6 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 세브란스 죄송 합니다만, 제가 정말로 원했던 것은 저에게 예외를 설명 할 누군가였습니다. 실제로 코드와 관련이 없으므로 이름 "Exception Translation" – Kevin

답변

0

함수가 값을 반환하지 않습니다. 당신은 오라클 11g를 사용하는 경우

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; 

, 당신은 DUAL 테이블에 전화를 생략 할 수 있습니다 :

나는 당신이 그것을하는 과정을 (일부 세미콜론, "있는 그대로"키워드 등을 추가) 할 생각
CREATE OR REPLACE 
PROCEDURE insert_proc(...) 
AS 
BEGIN 
    insert into table(id, ....) 
    values(nextvatable_seq.nextval,....); 
END insert_proc; 

NB 발생할 수있는 공통적 인 예외를 처리하기 위해 예외 섹션을 추가해야합니다. 등

제약 조건 위반은 오류가 EXCEPTION 키워드 근처의 구문 문제가 있음을 나타냅니다

+0

예, 미안합니다. 결국 값을 반환하지만 실제로 그 부분을 포함하지는 않습니다. 기본적으로 끝에 예외를 throw하는 경우 포함하지 않은 음수를 반환하지만 예외는 무엇을 의미합니까? – Kevin

+0

함수 선언에 키워드가 누락되었습니다. 실제 구문을 게시 할 수 있습니까? – Ollie

3

을 도움이되기를 바랍니다. 그러나 코드 개요는 블록에 예외 섹션이 있음을 나타내지는 않습니다. 그것은 우리에게 많은 도움을주기가 다소 어렵습니다.

의견에서 개요에있는 블록 중 하나 이상에 예외 섹션이 있음을 나타냅니다. 실제 코드 (또는 오류를 생성하는 예외 블록의 구문을 포함하는 자세한 윤곽)를 게시 할 수 있습니까?

또한 주석에서 사용자가 함수에 RETURN 문을 사용하여 일종의 상태 코드를 반환하는 것처럼 들리는 것으로 들립니다. 함수에서 리턴 코드를 사용하는 것은 거의 항상 실수입니다. 단순히 예외를 던지거나 (또는 ​​더 좋게 생성 된 예외가 전파되도록) 훨씬 강력합니다. DML을 수행하는 PL/SQL에서 함수를 작성하는 것은 일반적으로 실수입니다. DML을 수행하는 경우 거의 항상 프로 시저에서 수행해야합니다.