Search
Duplicate
💽

ORA-02000: missing ALWAYS keyword

Created time
2023/05/04 02:46
Last edited time
2023/07/11 01:36
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

missing ALWAYS keyword ??

11g 버전의 Oracle환경에서 Dbeaver(오라클)를 통해 테이블을 만들던 중 ORA-02000: missing ALWAYS keyword 이 에러를 만났다. 처음에는 문자 그대로 ALWAYS 키워드가 생략되서 발생된 에러라고 생각해서
CREATE TABLE compucategory ( id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY, name VARCHAR2(50) NOT NULL, CONSTRAINT name_unique UNIQUE (name) );
SQL
복사
이런 식으로 ALWAYS를 추가해서 해결하려고 했다. 그런데, 여전히 동일한 에러가 발생해서 여기저기 찾아본 결과, 스택오버플로우에서 나와 동일한 에러를 겪은 사람의 답변에서 해결의 실마리를 찾았다.

해결

Oracle의 IDENTITY는 자동으로 생성되는 숫자형 열을 만드는 기능인데, 이 열은 새로운 행이 테이블에 삽입될 때마다 자동으로 증가된다. 그런데, 해당 기능은 Oracle 11g 버전에서 지원하지 않아 생기는 문제였다. 따라서, 해당 문제를 해결하려면 시퀀스와 트리거를 사용해서 해결할 수 있다.
CREATE TABLE usercgv ( id NUMBER PRIMARY KEY, password VARCHAR2(50) NOT NULL, name VARCHAR2(50) NOT NULL, email VARCHAR2(50) NOT NULL, sid NUMBER DEFAULT 0 NOT NULL ); CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE NOCACHE; CREATE OR REPLACE TRIGGER user_trg BEFORE INSERT ON usercgv FOR EACH ROW BEGIN SELECT user_seq.nextval INTO :NEW.id FROM dual; END;
SQL
복사

참고