문제

SQL 만 사용하여 Oracle에서 열거를 어떻게 사용합니까? (PSQL 없음)

MySQL에서는 할 수 있습니다.

CREATE TABLE sizes (
   name ENUM('small', 'medium', 'large')
);

오라클에서 이것을하는 비슷한 방법은 무엇입니까?

도움이 되었습니까?

해결책

에 대해 조금 읽습니다 MySQL 열거, 나는 가장 가까운 것이 단순한 점검 제약 일 것이라고 생각합니다.

CREATE TABLE sizes (
  name VARCHAR2(10) CHECK( name IN ('small','medium','large') )
);

그러나 그것은 당신이 인덱스별로 값을 참조 할 수는 없습니다. 더 복잡한 외국의 주요 관계도 가능할 것입니다.

CREATE TABLE valid_names (
  name_id   NUMBER PRIMARY KEY,
  name_str  VARCHAR2(10)
);

INSERT INTO valid_sizes VALUES( 1, 'small' );
INSERT INTO valid_sizes VALUES( 2, 'medium' );
INSERT INTO valid_sizes VALUES( 3, 'large' );

CREATE TABLE sizes (
  name_id NUMBER REFERENCES valid_names( name_id )
);

CREATE VIEW vw_sizes
  AS 
  SELECT a.name_id name, <<other columns from the sizes table>>
    FROM valid_sizes a,
         sizes       b
   WHERE a.name_id = b.name_id

보기를 통해 작동하는 한 기능을 합리적으로 잘 복제 할 수있는 것 같습니다.

이제 PL/SQL 솔루션을 인정하는 경우, 보유 할 수있는 값 세트를 제한하고 ID를 얻고 값을 얻는 메소드를 가질 수있는 로직을 포함 할 수있는 사용자 정의 객체 유형을 만들 수 있습니다.

다른 팁

이 링크에서 C Language Enums에서 영감을 얻은 Oracle의 대체 솔루션/해결 방법을 찾을 수 있습니다. http://www.petefinnigan.com/weblog/archives/00001246.htm

곧 Pete는 정수 상수를 정의하고 하위 유형을 사용하여 제약 조건을 제한 할 것을 제안합니다.

RED constant number(1):=1;
GREEN constant number(1):=2;
BLUE constant number(1):=3;
YELLOW constant number(1):=4;

subtype COLORS is binary_integer range 1..4;

그런 다음 유형 색상으로 변수를 선언하고 매개 변수 및 함수 등의 값을 전달할 수 있습니다.

열에 제약 조건을 사용하지 않는 이유는 무엇입니까? 똑같은 일을 할 것입니다.

ALTER TABLE X 추가 제약 조건 Size_Constraint Check (x_size in ( 'small', 'medium', 'large')))

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top