programing

Oracle에서 Enum을 사용하는 방법

mytipbox 2023. 3. 9. 21:41
반응형

Oracle에서 Enum을 사용하는 방법

SQL만을 사용하여 Oracle에서 enum을 사용하는 방법(PSQL 없음)

MySQL에서는 다음을 수행할 수 있습니다.

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

Oracle에서 이와 유사한 방법은 무엇입니까?

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를 가져오거나 값을 가져오는 메서드를 갖는 논리를 포함하는 커스텀오브젝트 유형을 만들 수 있습니다.

열에 구속조건을 사용하면 어떨까요?다음과 같이 동작합니다.

ALTER TABLE x ADD 구속조건 size_constraint check ('small', 'medium', 'large'의 x_size)

이 링크에서는 C 언어 enum에서 영감을 얻은 Oracle 대체 솔루션/회피책을 찾을 수 있습니다.http://www.petefinnigan.com/weblog/archives/00001246.htm

간단히 말해서, Pete는 일부 정수 상수를 정의하고 SUBTYPE을 사용하여 이를 구성할 것을 제안합니다.

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;

그런 다음 COLORS를 입력하여 변수를 선언하고 매개 변수를 전달하며 함수 등에서 값을 반환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/203469/how-to-use-enums-in-oracle

반응형