2012-08-23 4 views
1

테이블의 한 필드가 업데이트되고 다른 필드가 해당 필드의 데이터에 종속되면 어떻게됩니까?테이블 필드가 업데이트 됨

나는 first, middle, last, full_name 필드를 가지고 있습니다. "마지막, 처음, 중간"데이터에 대해 Full_name 열이 한 번 삽입됩니다.

중간 이름을 삭제하면 어떻게 중간 이름을 제거하기 위해 full_name 필드를 업데이트 할 수 있습니까?

감사합니다. 도서 추천을 환영합니다.

답변

0

여기에서 수행하려는 작업은 a trigger입니다.
작동을 시작하는 방법은 다음과 같습니다.

데이터베이스에 변경된 사항이 있으며 해당 상황에서 요청한 사항을 수행합니다. 버전 11.1

3

전, 오라클은 계산 열을 지원하지 않습니다,하지만 당신은 사용할 수있는 AFTER UPDATE TRIGGER 대신 : 그것은 다른의 데이터에 따라 테이블에 하나 개의 컬럼을 가지고 기본 정상화를 위반

CREATE OR REPLACE TRIGGER PERSON_MIDDLE_NAME_COMPUTE 
AFTER UPDATE ON PERSON 
FOR EACH ROW 
BEGIN 

SELECT (:NEW.LAST || ',' || :NEW.FIRST || NVL2(:NEW.MIDDLE, ',' || :NEW.MIDDLE, '')) 
     INTO :NEW.FULL_NAME 
FROM DUAL; 

END; 
+0

감사를 보일 것이다! 나는 그것을 지금 이해한다. –

+0

@Reet : 그걸 작동시킬 수 있었습니까? –

3

열. 트리거를 사용하여 데이터를 동기화 상태로 유지할 수는 있지만 일반적으로 다소 번거롭습니다. 일반적으로 훨씬 편리합니다.

  1. 테이블에서 full_name 열을 완전히 제거합니다. full_name을 계산하고 전체 이름을 생성하거나 응용 프로그램에서 데이터를 쿼리하는 데 사용하는 뷰에 함수 호출을 추가 할 때 해당 함수를 응용 프로그램에서 호출하는 함수를 만듭니다. 전체 이름으로 검색해야하는 경우이 함수의 결과에 함수 기 반 색인을 작성할 수 있습니다.
  2. Oracle 11.1 이상을 사용하는 경우 full_name을 계산하는 테이블에 virtual column을 정의 할 수 있습니다.

가상 열 접근 방식은

같은
SQL> ed 
Wrote file afiedt.buf 

    1 create table foo (
    2 first_name varchar2(100), 
    3 last_name varchar2(100), 
    4 middle_name varchar2(100), 
    5 full_name varchar2(304) generated always as (last_name || ', ' || 
    6              first_name || 
    7             (case when middle_name is not null 
    8               then ', ' || middle_name 
    9               else null 
10*              end)) virtual) 
SQL>/

Table created. 

SQL> insert into foo(first_name, last_name, middle_name) 
    2 values('Justin', 'Cave', 'O.J.'); 

1 row created. 

SQL> select full_name from foo; 

FULL_NAME 
-------------------------------------------------------------------------------- 
Cave, Justin, O.J. 
+1

+1, 오라클이 버전 11.1에서 계산 된 열을 구현한다는 사실을 알지 못했습니다. –

+0

계산 열 = 가상 열 = 비 영구 열, 맞습니까? 영구 열을 원하면 어떻게 될까요? 나는 그것이 구원 받기를 원한다. –

+1

@Reet - 가상 열을 선언하면 계산 된 값이 인덱스에 지속적으로 저장되는 가상 열을 인덱싱하지 않는 한 값은 데이터를 쿼리 할 때 계산됩니다. 함수 기 반 색인을 작성하면 그 값은 색인에 지속적으로 저장됩니다. 가상 열의 색인을 생성하지 않으면 영구적인지 여부를 신경 쓰는 것이 이상하게 보일 수 있습니다. 가상 열을 인덱싱하는 경우 값이 테이블이나 인덱스에 유지되는지 여부가 중요합니까? –

관련 문제