programing

Oracle 테이블을 단일 행으로 제한하는 간단한 제약 조건

linuxpc 2023. 9. 13. 22:23
반응형

Oracle 테이블을 단일 행으로 제한하는 간단한 제약 조건

애플리케이션 구성 테이블을 1행으로 제한하는 간단한 방법을 찾고 있습니다.서브쿼리가 포함된 가상 컬럼이나 위에 구체화된 뷰를 사용하여 이 작업을 수행할 수 있다는 것은 잘 알고 있지만 실제로는 간단한 테이블입니다. 테이블을 만드는 것보다 구현하는 데 더 많은 줄이 필요하지 않은 제약 조건을 원합니다.

제가 생각한 가장 간단한 방법은 ID 필드를 1로 설정하고 ID가 1이어야 하는 체크 제약 사항입니다. 하지만 이로 인해 테이블에 혼란스러운 추가 필드가 추가되므로 UNIQUE_인 체크 제약 사항과 같이 제가 놓치고 있는 명백한 것이 있기를 바랍니다.필드 = MAX(유니크_)FIELD), 허용되지 않습니다.

가장 단순한 것은 상수에 대한 고유한 함수 기반 인덱스입니다.

> create unique index table_uk on one_row_table ('1');

대안:

테이블이 아닌 듀얼 뷰를 사용할 수 있습니다. 이는 실제로 모든 업데이트가 적절치 않을 수 있는 CREATE 또는 REFURE VIE일 것임을 의미합니다.패키지 본문이나 글로벌 응용 프로그램 컨텍스트에서 값을 반환하는 함수는 무효화 문제를 일으킬 경우 이를 해결할 수 있습니다.

11g의 읽기 전용 테이블(또는 이전 버전에서는 읽기 전용 테이블 공간의 테이블)은 옵션입니다.

다음은 몇 가지 옵션입니다.

  • 해당 테이블에서 INSERT 권한을 취소합니다.
  • 절차를 통해 구성 테이블에 대한 모든 액세스 관리
  • 검사 제약 조건(col=1)과 고유 제약 조건이 있는 열을 숨기는 보기로 구성 테이블을 바꿉니다.
  • 어떻게든 구체화된 보기 만들기
  • 예외를 발생시키는 INSERT에 화재를 트리거하는 테이블 만들기
  • 테이블 구조를 다시 생각하고 FROM_DATE를 추가하면 테이블이 업데이트되지 않고 매번 새로운 행을 생성할 수 있습니다.현재 구성은 from_date가 가장 높은 행이 됩니다.해당 테이블 위의 current_config 보기가 유용합니다.
  • 테이블을 다음과 같이 정의된 뷰로 바꿉니다.SELECT 1024 as buffer_size, '/var/tmp' as temp_dir, 'other constant' as other_constant from dual. 이것은 확실한 해결책이 아닙니다.
CREATE TABLE Singleton
(x INTEGER NOT NULL UNIQUE CHECK (x = 1),
 col1 INTEGER NOT NULL);

(테스트되지 않음)

SQL에는 빈 속성 집합을 키로 지정할 수 있는 간결한 구문이 없습니다. 이는 중복되는 추가 열이 필요 없기 때문에 유감입니다.여기서 유효한 키는 실제로 빈 집합이기 때문에 x의 제약 조건에 기본 키 대신 고유한 제약 조건을 사용했습니다.

언급URL : https://stackoverflow.com/questions/5477936/simple-constraint-to-limit-an-oracle-table-to-a-single-row

반응형