2014-04-04 6 views
0

this example을 바탕으로,이 코드 생성 :동적으로 순서를 시작할 수 없습니다

DECLARE 
    new_employee_id INTEGER; 
BEGIN 
    SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE; 
    EXECUTE IMMEDIATE 'CREATE OR REPLACE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1'; 
END; 
/

OBS : 아마 테이블의 기본 키가 훨씬 이해가되지 않습니다 자동 증가에 시퀀스를 사용하여, 그러나 이것은이다 학교 운동과 그것이 우리가해야 할 일입니다. 그러니 그면을 무시하십시오.

이 나는 ​​오류습니다된다 없거나 잘못된 옵션 ORA-06512 : LINE 1 ORA-00922 AT ERROR 라인 5

에서이 무엇이 잘못 될 수 있을까?

답변

1

이 전혀 생성하거나 사용해야합니다, SEQUENCE 옵션을 교체 CREATE SEQUENCE 문과 DROP 문을 먼저 삭제해야합니다. 당신이 드롭 시퀀스를 다시 추가하려고하는 이유 -

DECLARE 
    new_employee_id INTEGER; 
BEGIN 
    SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE; 
    EXECUTE IMMEDIATE 'CREATE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1'; 
END; 
/
+0

OMG ... 어떻게 볼 수 없었을까요 ?-) 감사합니다. – PrincessLilly

1

에는 느릅 나무는 항상 좋은 생각 ;-)

이 있어야 할 것입니다 (거기 교체하지 시퀀스 명령 검사 documentation을 만들 수있다

DECLARE 
    new_employee_id INTEGER; 
BEGIN 
    SELECT MAX(EMP_ID) + 1 INTO new_employee_id FROM EMPLOYEE; 
    EXECUTE IMMEDIATE 'CREATE SEQUENCE primary_key_seq START WITH ' || new_employee_id || ' INCREMENT BY 1'; 
END; 
/
0

이 질문에 또 다른 질문을 구걸? 당신은 이것을 할 필요가 없습니다. 한 번 순서를 만듭니다

CREATE SEQUENCE PRIMARY_KEY_SEQ 
    MINVALUE 1 
    MAXVALUE 9999999999999999999999999999 
    START WITH 1 
    INCREMENT BY 1 
    NOCACHE; 

그런 다음, 코드에서를 사용 :

DECLARE 
    new_employee_id INTEGER; 
BEGIN 
    new_employee_id := PRIMARY_KEY_SEQ.NEXTVAL; 

    INSERT INTO SOME_TABLE_MAYBE_EMPLOYEES 
    (ID, WHATEVER, WHATEVER_ELSE) 
    VALUES 
    (new_employee_id, 'WHATEVER', 'WHATEVER_ELSE'); 
END; 

순서의 전체 목적은 고유의 비 반복 값을 제공하는 것입니다. 테이블로 나가서 MAX (ID)를 가져 와서 시퀀스를 다시 생성하는 것은 시퀀스가 ​​사용되는 방식에서 거꾸로 진행됩니다. 시퀀스를 한 번 만든 다음 여러 번 사용하십시오.

이 정보가 도움이되기를 바랍니다.

공유하고 즐길 수 있습니다.

+0

저는이 운동을 이해하기 위해 많은 시행 착오를 거쳤습니다. 그래서 전에 진행하기 전에 이전에 만든 시퀀스가 ​​삭제되었는지 확인해야했습니다. 제 코드를 실제 사례로 해석하지 마십시오. 단지 학교 운동 일뿐입니다. – PrincessLilly