2013-03-07 3 views
2

오라클에서 약간의 문제가 있습니다. 이미 데이터가있는 테이블에 ID를 생성하는 시퀀스를 만들려고합니다. 다음 익명 블록을 사용하려고합니다. 나는 그것이 완벽하게 작동하는 Y 변수의 값을 실행하면oracle에서 쿼리 문자열로 실행

Error report: 
ORA-00911: invalid character 
ORA-06512: at line 5 
00911. 00000 - "invalid character" 

:

declare y varchar2(2000); 
BEGIN 
    SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH ' || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20;' INTO y FROM TEST_TABLE; 
    --dbms_output.put_line(y); 
    execute immediate y; 
end; 

나는 다음과 같은 오류가 발생합니다. 저는 SQL Developer를 입력 인터페이스로 사용하고 11g r2 오라클 서버에서 작업하고 있습니다. 'INCREMENT BY'매개 변수가 생성 된 스크립트와 비슷한 코드를 발견했습니다. 누군가 내 실수를 설명 할 수 있습니까?

답변

8

execute immediate 때 실행하는 명령 끝에 세미콜론이 없어야합니다. SQL Developer (및 SQL*Plus 및 기타 클라이언트)의 명령 구분 기호이며 SQL 문 자체는 아닙니다.

SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH ' 
    || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20' INTO y FROM TEST_TABLE; 

이것은 examples for plain SQL에 표시됩니다. 그러나 동적 SQL 내에서 PL/SQL을 사용하는 경우 PL/SQL 자체에 적합한 세미콜론이 필요합니다. 클라이언트에서 직접 실행하는 데는 /을 사용하지 않아도됩니다. 이것은 other examples에 표시됩니다.