[SQL] 오라클에 sequence.nextval와 테이블을 만들 [중복]
SQL오라클에 sequence.nextval와 테이블을 만들 [중복]
난 다음 쿼리를 사용하여 시퀀스를 생성,
create sequence qname_id_seq start with 1 increment by 1 nocache;
내가 위의 순서를 사용하는 테이블을 만들려고 할 때 지금, 그것은 다음과 같은 오류를 던지고있다
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
나는 sequence.nextval있는 테이블을 만들려면 다음 쿼리를 사용
CREATE TABLE qname
(
qname_id integer NOT NULL default qname_id_seq.nextval PRIMARY KEY,
qname VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE
);
해결법
-
==============================
1.우리는 지금 마지막 순서가 자동으로 생성 된 장면 뒤에있는 경우, 많은 다른 데이터베이스와 같은 IDENTITY 열을 가지고있다. 이 솔루션은 훨씬 더 빨리로이 블로그 게시물에서 볼 수있는 트리거 기반 하나보다.
우리는 지금 마지막 순서가 자동으로 생성 된 장면 뒤에있는 경우, 많은 다른 데이터베이스와 같은 IDENTITY 열을 가지고있다. 이 솔루션은 훨씬 더 빨리로이 블로그 게시물에서 볼 수있는 트리거 기반 하나보다.
그래서, 당신의 테이블 생성은 다음과 같이 보일 것이다 :
CREATE TABLE qname ( qname_id integer GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL PRIMARY KEY, qname VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE );
문서에 따르면, 당신은 할 수 없습니다 :
오라클이 사용하는 트리거, 예를 들어,이다의 표준 방법은 "자동 증가"열이하는
CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT ON qname FOR EACH ROW -- Optionally restrict this trigger to fire only when really needed WHEN (new.qname_id is null) DECLARE v_id qname.qname_id%TYPE; BEGIN -- Select a new value from the sequence into a local variable. As David -- commented, this step is optional. You can directly select into :new.qname_id SELECT qname_id_seq.nextval INTO v_id FROM DUAL; -- :new references the record that you are about to insert into qname. Hence, -- you can overwrite the value of :new.qname_id (qname.qname_id) with the value -- obtained from your sequence, before inserting :new.qname_id := v_id; END my_trigger;
문서에서 오라클 트리거에 대한 더 읽기
-
==============================
2.오라클 12C에서 이제 열에 대한 디폴트 값으로 CURRVAL과 NEXTVAL 순서 pseudocolumns를 지정할 수 있습니다. 양자 택일로, 당신은 신원 열을 사용할 수 있습니다; 보다:
오라클 12C에서 이제 열에 대한 디폴트 값으로 CURRVAL과 NEXTVAL 순서 pseudocolumns를 지정할 수 있습니다. 양자 택일로, 당신은 신원 열을 사용할 수 있습니다; 보다:
EG,
CREATE SEQUENCE t1_seq; CREATE TABLE t1 ( id NUMBER DEFAULT t1_seq.NEXTVAL, description VARCHAR2(30) );
-
==============================
3.나 자신은 루카스 EDGER의 솔루션을 선호합니다.
나 자신은 루카스 EDGER의 솔루션을 선호합니다.
하지만 당신은 열에 대한 기본값으로 적용되는 고유 ID를 생성 할 수있는 기능 SYS_GUID도가 알고 할 수 있습니다.
여기 장점과 단점에 대한 자세한 내용을보실 수 있습니다
-
==============================
4.당신은 (내 오라클 DB 버전 11) 그렇게 오라클의 SQL 개발자 도구를 사용할 수 있습니다. 테이블을 생성하는 고급 옵션을 선택하고 하단과에서 ID 열 탭을 클릭하는 동안이 열 순서를 선택합니다. 이것은 (트리거와 Squence 대응)는 AUTO_INCREMENT 컬럼을 생성합니다.
당신은 (내 오라클 DB 버전 11) 그렇게 오라클의 SQL 개발자 도구를 사용할 수 있습니다. 테이블을 생성하는 고급 옵션을 선택하고 하단과에서 ID 열 탭을 클릭하는 동안이 열 순서를 선택합니다. 이것은 (트리거와 Squence 대응)는 AUTO_INCREMENT 컬럼을 생성합니다.
-
==============================
5.오라클 12C에서 당신은 또한 ID 열을 선언 할 수 있습니다
오라클 12C에서 당신은 또한 ID 열을 선언 할 수 있습니다
CREATE TABLE identity_test_tab ( id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, description VARCHAR2(30) );
반바지입니다 예 및 성능 테스트는 여기에 ... 결론은 순서 또는 새로운 정체성 컬럼의 직접 사용이 훨씬 빠른 트리거보다 때문이다.
from https://stackoverflow.com/questions/10613846/create-table-with-sequence-nextval-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이 별도의 열로 두 SQL 쿼리의 결과를 결합 (0) | 2020.04.25 |
---|---|
[SQL] 어떻게 업데이트하고 위해 MS의 SQL을 사용하여합니다 (0) | 2020.04.25 |
[SQL] 어떻게 저장 프로 시저 SQL 서버 익스프레스 에디션의 모든 일을 실행? (0) | 2020.04.25 |
[SQL] 별명으로 그룹 (오라클) (0) | 2020.04.25 |
[SQL] 스크립트 디스크에 VARBINARY 데이터를 저장하기 (0) | 2020.04.25 |