programing

Oracle에서는 뷰를 통해 레코드를 삽입하거나 업데이트할 수 있습니까?

powerit 2023. 2. 27. 22:15
반응형

Oracle에서는 뷰를 통해 레코드를 삽입하거나 업데이트할 수 있습니까?

Oracle에서는 뷰를 통해 레코드(행)를 삽입하거나 업데이트할 수 있습니까?

Oracle의 보기는 특정 조건에서 업데이트할 수 있습니다.이것은 까다로울 수 있으며, 보통 권장되지 않습니다.

Oracle 10g SQL 레퍼런스:

업데이트 가능한 보기에 대한 참고 사항

업데이트 가능한 뷰는 기본 테이블 행을 삽입, 업데이트 또는 삭제하는 데 사용할 수 있는 뷰입니다.본질적으로 업데이트할 수 있도록 보기를 생성하거나, 모든 보기에 대해 트리거를 생성하여 업데이트할 수 있도록 만들 수 있습니다.

본질적으로 업데이트 가능한 뷰의 열을 수정할 수 있는지 여부와 방법을 알아보려면 USER_UPDABLE_COLUMNLS 데이터 사전 보기를 쿼리하십시오.이 보기에 표시되는 정보는 본질적으로 업데이트 가능한 보기에 대해서만 의미가 있습니다.보기를 본질적으로 업데이트할 수 있으려면 다음 조건을 충족해야 합니다.

  • 뷰의 각 열은 단일 테이블의 열에 매핑되어야 합니다.예를 들어 뷰 열이 TABLE 절(내포되지 않은 컬렉션)의 출력에 매핑되는 경우 뷰는 본질적으로 업데이트할 수 없습니다.
  • 뷰에는 다음 구성 요소를 포함할 수 없습니다.
    • 집합 연산자
    • DISPENT 연산자
    • 집계 또는 분석 함수
    • 그룹화 기준, 주문 기준, 모델화, 연결 기준 또는 시작 절
    • SELECT 목록의 컬렉션 식
    • SELECT 목록의 하위 쿼리
    • 읽기 전용으로 지정된 하위 쿼리
    • Oracle Database Administrator's Guide에 설명된 대로 일부 예외를 제외하고 참여

또한 본질적으로 업데이트 가능한 뷰에 의사 초콜릿 또는 식이 포함된 경우 이러한 의사 초콜릿 또는 식을 참조하는 UPDATE 문을 사용하여 기본 테이블 행을 업데이트할 수 없습니다.

조인 보기를 업데이트할 수 있도록 하려면 다음 조건이 모두 충족되어야 합니다.

  • DML 문은 가입의 기초가 되는1개의 테이블에만 영향을 줍니다.
  • INSERT 문의 경우 CHECK OPTION을 사용하여 뷰를 생성해서는 안 되며 값이 삽입되는 모든 열은 키가 저장된 테이블에서 가져와야 합니다.키 보존 테이블은 기본 테이블의 모든 프라이머리 키 또는 고유 키 값이 조인 뷰에서도 고유한 테이블입니다.
  • UPDATE 문의 경우 갱신된 모든 열을 키 보존 테이블에서 추출해야 합니다.CHECK OPTION을 사용하여 뷰를 만든 경우 뷰에서 두 번 이상 참조되는 테이블에서 가져온 조인 열 및 열은 업데이트로부터 보호되어야 합니다.
  • DELETE 스테이트먼트의 경우 Join에 의해 여러 개의 키가 보존된 테이블이 생성되면 보기가 CHECK OPTION으로 작성되었는지 여부에 관계없이 Oracle Database는 FROM 절에 지정된 첫 번째 테이블에서 삭제됩니다.

Oracle은 뷰를 갱신할 수 있는 두 가지 방법이 있습니다.

  1. 업데이트하려는 항목에 대한 보기가 "키 보존"됩니다.즉, 기본 테이블의 기본 키가 뷰에 있고 행은 뷰에 한 번만 표시됩니다.즉, Oracle은 업데이트할 기본 테이블 행을 정확하게 파악할 수 있습니다.
  2. 트리거 대신 를 씁니다.

트리거 대신 사용하지 않고 기본 테이블을 직접 업데이트하도록 코드를 가져옵니다.

보기를 통해 레코드를 업데이트할 수 있는 시간은 두 가지입니다.

  1. 뷰에 Join 또는 Procedure가 없는 경우 를 호출하여 단일 기본 테이블에서 데이터를 선택합니다.
  2. 뷰에 뷰와 연결된 INNSERT 대신 트리거가 있는 경우.

일반적으로 뷰에 대한 트리거를 특별히 작성하지 않은 경우 뷰에 대한 삽입을 수행할 수 있어야 합니다.또한 업데이트 수행에 도움이 되도록 쓸 수 있는 업데이트 트리거도 있습니다.

, 뷰에 업데이트 및 삽입할 수 있습니다.이 편집은 원래 테이블에 반영됩니다.
하지만
1-뷰는 테이블에 NOT NULL 이 모두 표시되어야 합니다.
2-업데이트는 테이블과 동일한 규칙을 가져야 합니다."다른 외부 키와 관련된 기본 키 삭제..기타...

언급URL : https://stackoverflow.com/questions/1652995/in-oracle-is-it-possible-to-insert-or-update-a-record-through-a-view

반응형