SW/Database / / 2025. 2. 17. 11:11

ORA-02014: Cannot select FOR UPDATE from an updateable view / 원인과 해결 방법

반응형

ORA-02014: Cannot select FOR UPDATE from an updateable view

ORA-02014 오류는 업데이트 가능한 뷰에서 FOR UPDATE 절을 사용할 수 없는 경우 발생합니다.

 

 

ORA-02014: Cannot select FOR UPDATE from an updateable view / 원인과 해결 방법

 

 

오류 원인

ORA-02014 오류는 다음과 같은 원인으로 인해 발생할 수 있습니다:

  1. 뷰 정의가 복잡하여 업데이트 불가능한 경우: - 뷰에 JOIN, GROUP BY, DISTINCT, AGGREGATE FUNCTION이 포함된 경우
  2. 뷰에 대신 트리거(INSTEAD OF TRIGGER)가 없는 경우: - 복잡한 뷰에서 데이터를 수정하려면 대신 트리거가 필요합니다.
  3. 베이스 테이블에 대한 적절한 권한 부족: - 뷰가 참조하는 테이블에 SELECT ... FOR UPDATE 권한이 없는 경우

해결 방법

ORA-02014 오류를 해결하기 위해 다음 단계를 수행할 수 있습니다:

  1. 뷰가 업데이트 가능한지 확인: 뷰가 업데이트 가능한지 확인하려면 다음 명령을 실행합니다.
    SELECT owner, view_name, READ_ONLY 
    FROM dba_views 
    WHERE view_name = '뷰_이름';
    만약 READ_ONLYYES라면 업데이트할 수 없는 뷰입니다.
  2. 대신 트리거(INSTEAD OF TRIGGER) 추가: 업데이트가 필요한 경우 대신 트리거를 추가합니다.
    CREATE OR REPLACE TRIGGER view_update_trigger
    INSTEAD OF UPDATE ON my_view
    FOR EACH ROW
    BEGIN
      UPDATE my_table 
      SET column1 = :NEW.column1 
      WHERE id = :OLD.id;
    END;
  3. 베이스 테이블에 권한 부여: 필요한 권한이 있는지 확인하고 부족한 경우 권한을 부여합니다.
    GRANT SELECT, UPDATE ON my_table TO user;
  4. 뷰를 단순화: 가능하면 JOIN이나 GROUP BY를 제거하여 단순한 뷰로 변경합니다.
    CREATE OR REPLACE VIEW simple_view AS 
    SELECT id, name FROM my_table;

간단 요약

  • ORA-02014 오류는 업데이트 가능한 뷰에서 FOR UPDATE 절을 사용할 수 없을 때 발생합니다.
  • 해결 방법: - 뷰가 업데이트 가능한지 확인 (`SELECT owner, view_name, READ_ONLY FROM dba_views;`) - INSTEAD OF TRIGGER 추가하여 업데이트 가능하게 변경 - 베이스 테이블에 `SELECT, UPDATE` 권한 부여 - 필요하면 뷰를 단순화하여 다시 생성
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유