UPDATE문

UPDATE 문은 외부 데이터베이스에 있는 테이블의 선택된 행에서 지정된 열의 값을 변경합니다.

구문

WHERE 절 표현식이 TRUE로 평가하는 모든 행이 TableReference로 식별된 테이블에서 갱신됩니다. 각 행이 조사되고 변수는 현재 행의 지점으로 설정됩니다. 일반적으로 WHERE 절 표현식은 이 변수를 사용하여 열 값에 액세스하므로 컨텐츠에 따라 행이 갱신되거나 변경되지 않은 상태로 보유됩니다. 변수는 CorrelationName으로 참조되거나 AS 절이 없을 경우 TableName으로 참조됩니다. 갱신할 행이 선택되었으면 SET 절에서 이름 지정된 각 열에는 해당 표현식으로 판별한 대로 새 값이 제공됩니다. 필요한 경우 이러한 표현식에서 현재 행 변수를 참조할 수 있습니다.

테이블 참조

테이블 참조는 메시지 트리를 참조하는 데 사용된 필드 참조의 특수한 경우입니다. 항상 "Database"라는 단어로 시작하고 다음 사항을 포함할 수 있습니다.
  • 테이블 이름만
  • 스키마 이름 및 테이블 이름
  • 데이터 소스 이름(즉, 데이터베이스 인스턴스 이름), 스키마 이름 및 테이블 이름
각 경우에 이름은 직접 지정하거나 괄호({...})로 묶인 표현식으로 지정할 수 있습니다. 직접 지정된 데이터 소스, 스키마 또는 테이블 이름은 이름이 대체될 수 있습니다. 즉, 사용된 이름이 알려진 이름으로 선언된 경우 이름 자체보다 선언된 이름의 값이 사용됩니다(DECLARE문 참조).

스키마 이름이 지정되지 않은 경우 브로커 데이터베이스 사용자에 대한 디폴트 스키마가 사용됩니다.

데이터 소스 이름을 지정하지 않은 경우 노드의 데이터 소스 속성에서 지정한 데이터베이스가 사용됩니다.

WHERE 절

WHERE 절 표현식은 임의 결합으로 브로커의 연산자와 기능 중 하나를 사용할 수 있습니다. 표현식은 테이블의 열, 메시지 필드 및 선언된 변수나 상수를 나타낼 수 있습니다.

그러나 브로커는 표현식을 조사하고 데이터베이스에서 전체 표현식을 평가할 수 있는지 여부를 결정하여 WHERE 절 표현식을 처리합니다. 전체 표현식을 평가할 수 있는 경우, 데이터베이스에 제공됩니다. 데이터베이스에서 평가할 수 있으려면, 데이터베이스에서 지원하는 함수와 연산자만을 사용해야 합니다.

그러나 WHERE 절은 SELECT를 포함하여 선언된 메시지 필드, 상관 이름 및 기타 선언된 변수나 범위 안의 상수를 나타낼 수 있습니다.

전체 표현식을 데이터베이스에서 평가할 수 없는 경우, 브로커는 맨 위 레벨 AND 연산자를 찾아 각 부속 표현식을 조사합니다. 그런 다음 평가할 수 있는 서브 표현식을 데이터베이스에 제공하려고 시도하며, 브로커가 나머지를 평가하도록 둡니다. 다음 두 가지 이유로 이러한 상황을 인식해야 합니다.
  1. 외관상 WHERE절 표현식에 대한 사소한 변경사항은 성능에 많은 영향을 미칠 수 있습니다. 사용자 추적을 조사하여 데이터베이스에 제공된 표현식의 정보를 판별할 수 있습니다.
  2. 일부 데이터베이스의 기능은 브로커의 기능과는 다른 미묘한 작동 차이를 나타냅니다.

오류 핸들링

갱신 조작 중 오류가 발생할 수 있습니다. 예를 들면, 데이터베이스가 조작될 수 없거나, 표에 새 값을 방해하도록 정의된 제한조건이 있을 수 있습니다. 이러한 경우 예외가 발생합니다(노드에서 throw exception on database error 등록 정보를 FALSE로 설정한 경우 제외). 이 예외는 적절한 SQL 코드, 상태, 고유 오류 및 오류 텍스트 값을 설정하고 오류 핸들러로 처리할 수 있습니다(DECLARE HANDLER 문 참조).

데이터베이스 오류 처리에 대한 자세한 정보는 데이터베이스 상태 캡처를 참조하십시오.

다음의 예는 Database 노드의 dataSource 등록 정보가 구성되었고 식별하는 데이터베이스에 COMPANY 및 PRICES 열이 있는 STOCKPRICES라는 테이블이 있는 것으로 가정합니다. COMPANY 열이 메시지의 COMPANY 필드에서 제공된 값과 일치한 STOCKPRICES 테이블에 있는 행의 PRICE 열을 갱신합니다.
UPDATE Database.StockPrices AS SP
 SET PRICE = InputBody.Message.StockPrice
 WHERE SP.COMPANY = InputBody.Message.Company
다음 예에서는(유사한 가정 작성) SET절 표현식이 열의 기존 값을 참조하므로 메시지의 용량만큼 값이 감소합니다.
UPDATE Database.INVENTORY AS INV
 SET QUANTITY = INV.QUANTITY - InputBody.Message.QuantitySold
 WHERE INV.ITEMNUMBER = InputBody.Message.ItemNumber
다음의 예는 여러 열을 갱신합니다.
UPDATE Database.table AS T
  SET column1 = T.column1+1,
     column2 = T.column2+2;

열 이름("="의 왼쪽)은 단일 ID입니다. 이 이름은 테이블 이름 또는 상관 이름을 사용하여 규정할 수 없습니다. 반대로 표현식에 있는 데이터베이스 열에 대한 참조사항("="의 오른쪽)은 상관 이름을 사용하여 규정해야 합니다.

다음 예는 계산된 데이터 소스, 스키마 및 테이블 이름의 사용을 표시합니다.
-- Declare variables to hold the data source, schema and table names 
-- and set their default values
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';
-- Code which calculates their actual values comes here

-- Update rows in the table
UPDATE Database.{Source}.{Schema}.{Table} AS R SET Value = 0;
관련 개념
ESQL 개요
관련 태스크
ESQL 개발
데이터베이스 상태 캡처
관련 참조
구문 다이어그램: 사용 가능한 유형
ESQL문
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05160_