CREATE QUEUE
CREATE QUEUE#
구문#
create_queue ::=#
전제 조건#
아래의 조건 중 하나 이상을 만족해야 테이블을 생성할 수 있다.
- SYS 사용자이다.
- 사용자 자신의 스키마에 테이블을 생성하려면, CREATE TABLE 또는 CREATE ANY TABLE 시스템 권한을 가지고 있어야 한다.
- 다른 사용자의 스키마에 테이블을 생성하려면, CREATE ANY TABLE 시스템 권한을 가지고 있어야 한다.
설명#
큐에 삽입 가능한 최대 메시지의 길이를 지정하거나 사용자가 직접 칼럼을 정의하여 큐를 생성하는 구문이다. 큐 테이블에 저장 가능한 최대 레코드 수도 지정할 수 있다.
queue_name#
큐의 이름을 지정한다. 최대로 가능한 큐 이름의 길이는 28 바이트이다.
size#
큐에 저장될 메시지의 최대 크기(단위: 바이트)를 지정한다. 지정 가능한 값의 범위는 1에서 32000바이트이다.
FIXED|variable_clause#
메시지의 저장 방식을 지정한다. (자세한 설명은 General Reference를 참고한다.)
column_definition#
사용자 정의 칼럼을 지정한다. CREATE TABLE의 column_definition을 참고하며, 해당 구문에서 column_constraint, crypt_clasue, timestamp는 지원하지 않는다.
MAXROWS count#
큐 테이블에 저장 가능한 최대 레코드 수를 지정한다. 지정 가능한 값의 범위는 1에서 4294967295(232-1)이며, 생략할 경우 기본값은 최대값인 4294967295이다.
DELETE [ON|OFF]#
큐 테이블에 DELETE 문 허용 여부를 결정하는 절이다. ON은 큐 테이블에 DELTE 문을 허용한다. OFF는 큐 테이블에 DELETE 문을 허용하지 않는다. 이 경우 DELETE 문을 허용한 경우보다 DEQUEUE 병렬 수행 성능이 향상된다. DELETE 절을 생략하면 DELETE ON으로 큐 테이블을 생성한다. DELETE 문을 허용하지 않는 큐 테이블은 V$QUEUE_DELETE_OFF에서 확인할 수 있다.
주의 사항#
큐 생성시에 데이터베이스 내부적으로 "큐 이름"+ "_NEXT_MSG_ID"라는 명칭의 테이블 객체가 생성된다. 따라서 생성 하고자 하는 큐의 이름 또는 "큐 이름"+ "_NEXT_MSG_ID"과 동일한 이름의 테이블, 뷰, 시퀀스, 시노님, 또는 저장 프로시저가 이미 존재하는 경우에 에러가 발생한다.
예제#
<질의> 메시지의 길이가 최대 40이고, 최대 레코드 개수가 1,000,000인 Q1이라는 이름의 큐를 생성하라.
iSQL> CREATE QUEUE Q1(40) MAXROWS 1000000;
Create success.
<질의> 'Q1' 이름의 큐를 생성할 때, numeric(5,2) 타입의 값을 저장할 수 있는 2개의 칼럼을 생성하라.
iSQL> CREATE QUEUE Q1(c1 numeric(5,2), c2 numeric(5,2));
Create success.
<질의> 사용자 칼럼을 정의한 'Q2' 이름의 큐를 생성하고, 해당 칼럼에 메세지를 입력 후, 삭제하라.
iSQL> CREATE QUEUE Q2(V1 VARCHAR(10), V2 INTEGER, V3 NUMERIC(5,3));
Create success.
iSQL> ENQUEUE INTO Q2(V1, V2, V3) VALUES ('abc', 1, 99.999);
1 row inserted.
iSQL> DEQUEUE V1, V2, V3 FROM Q2;
V1 V2 V3
----------------------------------------
abc 1 99.999
1 row selected.
<질의> 메시지의 길이가 최대 40이고, DELETE 문을 허용하지 않는 Q3이라는 이름의 큐 테이블을 생성하라.
iSQL> CREATE QUEUE Q3(40) DELETE OFF;
Create success.