UPDATE (한국어)
목적
UPDATE
문을 사용하여 테이블 또는 뷰의 기본 테이블에서 기존 값을 변경하거나 구체화 된 뷰의 마스터 테이블
추가 주제
-
전제 조건
-
구문
-
의미
-
예
전제 조건
테이블의 값을 업데이트하려면 테이블이 자체 스키마에 있거나 테이블에 대한 UPDATE
객체 권한이 있어야합니다.
업데이트하려면 뷰의 기본 테이블에있는 값 :
-
뷰에 대한
UPDATE
객체 권한이 있어야합니다. -
뷰가 포함 된 스키마를 소유 한 사람은 기본 테이블에 대한
UPDATE
개체 권한이 있어야합니다.
UPDATE
ANY
TABLE
시스템 권한을 통해 모든 테이블 또는 기본 테이블
다음과 같은 경우 업데이트 할 개체에 대한 SELECT
개체 권한도 있어야합니다.
-
객체가 원격 데이터베이스에 있거나
-
SQL92_SECURITY
초기화 매개 변수가TRUE
및UPDATE
연산은where_clause
의 열과 같은 테이블 열을 참조합니다.
구문
update :: =
그림 설명 update.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, returning_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
그림 설명 DML_table_expression_clause.gif
(subquery :: =-SELECT의 일부, subquery_restriction_clause :: =, table_collection_expression :: =)
subquery_restriction_clause :: =
그림 설명 subquery_restriction_clause.gif
table_collection_expression :: =
그림에 대한 설명 table_collection_expression.gif
update_set_clause :: =
그림 update_set_clause에 대한 설명입니다. gif
where_clause :: =
그림 설명 where_clause.gif
returning_clause :: =
그림 설명 returning_clause.gif
error_logging_clause :: =
그림 설명 error_logging_clause.gif
의미
힌트
설명 지정 명령문에 대한 실행 계획 선택에 대한 지침을 최적화 프로그램에 전달합니다.
UPDATE
키워드 바로 뒤에 병렬 힌트를 배치하여 두 하위 항목을 병렬화 할 수 있습니다. 거짓말 스캔 및 UPDATE
작업.
참조 :
-
Oracle Database Performance Tuning Guide 및 ” 힌트 구문 및 설명은 Using Hints “를 참조하십시오.
-
병렬 DML에 대한 자세한 내용은 Oracle Database Performance Tuning Guide 및 Oracle Database Concepts
DML_table_expression_clause
ONLY
절은 뷰에만 적용됩니다. UPDATE
절의보기가 계층 구조에 속하는보기이고 어떤 항목에서도 행을 업데이트하지 않으려면 ONLY
구문을 지정하십시오.
참조 :
“DML_table_expression_clause에 대한 제한”및 “테이블 업데이트 : 예제”
스키마
업데이트 할 개체를 포함하는 스키마를 지정합니다. schema
를 생략하면 데이터베이스는 개체가 자신의 스키마에 있다고 가정합니다.
table | 보기 | materialized_view | subquery
테이블, 뷰, 구체화 된 뷰 또는 업데이트 할 하위 쿼리에서 반환 된 열의 이름을 지정합니다. 테이블에 대해 UPDATE
문을 실행하면 테이블과 관련된 모든 UPDATE
트리거가 실행됩니다.
-
view
를 지정하면 데이터베이스가보기의 기본 테이블을 업데이트합니다.뷰의 정의 쿼리에 다음 구문 중 하나가 포함 된 경우INSTEAD
OF
트리거를 제외하고는 뷰를 업데이트 할 수 없습니다.
집합 연산자 ADISTINCT
연산자 집계 또는 분석 함수 AGROUP
BY
,ORDER
BY
,MODEL
,CONNECT
BY
또는START
WITH
절SELECT
목록SELECT
목록의 하위 쿼리WITH READ ONLY
조인으로 지정된 하위 쿼리 (일부 예외 있음) , Oracle Database Administrator “s Guide
-
보기를 통해 둘 이상의 기본 테이블을 업데이트 할 수 없습니다.
-
또한 보기는
WITH
CHECK
, 결과 데이터가 뷰의 정의 쿼리를 충족하는 경우에만 뷰를 업데이트 할 수 있습니다. -
table
또는view
의 기본 테이블에 하나 이상의 도메인 인덱스 열이 포함 된 경우이 문은 적절한 인덱스 유형 업데이트 루틴을 실행합니다. -
읽기 전용 구체화 된 뷰에서 행을 업데이트 할 수 없습니다. 쓰기 가능한 구체화 된 뷰에서 행을 업데이트하면 데이터베이스가 기본 컨테이너 테이블에서 행을 업데이트합니다. 그러나 다음 새로 고침 작업시 업데이트를 덮어 씁니다. 구체화 된 뷰 그룹의 일부인 업데이트 가능한 구체화 된 뷰의 행을 업데이트하면 데이터베이스는 마스터 테이블의 해당 행도 업데이트합니다.
참조 또한 :
-
색인 유형 업데이트 루틴에 대한 자세한 내용은 Oracle Data Cartridge 개발자 가이드
-
CREATE MATERIALIZED VIEW에 대한 정보는 업데이트 가능한 구체화 된 뷰 생성
PARTITION | SUBPARTITION
table
업데이트 대상입니다. 파티션을 나눈 테이블의 값을 업데이트 할 때 파티션 이름을 지정할 필요가 없습니다. 그러나 경우에 따라 파티션 이름을 지정하는 것이 복잡한 where_clause
보다 효율적일 수 있습니다. .
참조 :
“파티션 된 테이블 및 인덱스 참조”및 “파티션 업데이트 : 예”
dblink
지정 원격 데이터베이스에 대한 데이터베이스 링크의 전체 또는 부분 이름 그는 개체가 있습니다. Oracle Database 분산 기능을 사용하는 경우에만 데이터베이스 링크를 사용하여 원격 개체를 업데이트 할 수 있습니다.
dblink,
를 생략하면 데이터베이스는 개체가 로컬 데이터베이스에 있습니다.
참조 :
데이터베이스 링크 참조에 대한 정보는 “원격 데이터베이스의 개체 참조”
subquery_restriction_clause
subquery_restriction_clause
를 사용하여 다음 방법 중 하나로 하위 쿼리를 제한합니다.
WITH READ ONLY 지정 WITH READ ONLY
테이블 또는 뷰를 업데이트 할 수 없음을 나타냅니다.
WITH CHECK OPTION WITH CHECK OPTION
를 지정하여 Oracle 데이터베이스가 테이블 또는 뷰에 대한 변경을 금지 함을 나타냅니다. 하위 쿼리에 포함되지 않은 행. DML 문의 하위 쿼리에 사용되는 경우 FROM
절의 하위 쿼리에이 절을 지정할 수 있지만 WHERE
절.
CONSTRAINT 제약 조건 CHECK OPTION
제약 조건의 이름을 지정합니다. 이 식별자를 생략하면 Oracle은 자동으로 제약 조건에 SYS_C
n
형식의 이름을 할당합니다. 여기서 n은 데이터베이스 내에서 고유 한 제약 이름입니다.
참조 :
“With CHECK OPTION 절 사용 : 예제”
table_collection_expression
table_collection_expression
를 사용하면 collection_expression
의 값이 쿼리 및 DML 작업을 위해 테이블로 처리되어야 함을 Oracle에 알릴 수 있습니다. collection_expression
는 하위 쿼리, 열, 함수 또는 컬렉션 생성자가 될 수 있습니다. 형식에 관계없이 컬렉션 값, 즉 유형이 중첩 된 테이블 또는 varray 인 값을 반환해야합니다. 컬렉션의 요소를 추출하는이 프로세스를 컬렉션 분리라고합니다.
선택 사항 인 더하기 (+)는 TABLE
표현식을 부모와 결합하는 경우 관련이 있습니다. 표. +는 컬렉션 표현식이 null 인 경우에도 쿼리가 외부 테이블의 행을 반환하도록 두 개의 외부 조인을 생성합니다.
참고 :
Oracle의 이전 릴리스에서는 collection_expression
가 하위 쿼리 일 때 table_collection_expression
는 THE
.이 사용은 이제 더 이상 사용되지 않습니다.
table_collection_expression
를 사용하여 다른 테이블의 행을 기반으로 한 테이블의 행을 업데이트 할 수 있습니다. 예를 들어 4 개의 분기 별 판매 테이블을 연간 판매 테이블로 롤업 할 수 있습니다.
t_alias
참조 할 테이블, 뷰 또는 하위 쿼리에 대한 상관 관계 이름 (별칭)을 지정합니다. 성명서의 다른 곳에. 이 별칭은 DML_table_expression_clause
가 개체 유형 속성 또는 개체 유형 메서드를 참조하는 경우 필요합니다.
참조 :
“상관 업데이트 : 예 “
DML_table_expression_clause에 대한 제한이 절에는 다음 제한이 적용됩니다.
-
table
또는view
의 기본 테이블에는IN_PROGRESS
또는FAILED
로 표시된 모든 도메인 색인이 포함됩니다. -
영향을받는 인덱스 파티션이
UNUSABLE
로 표시된 경우 파티션에 삽입 할 수 없습니다. -
DML_table_expression_clause
의 하위 쿼리에order_by_clause
를 지정할 수 없습니다. -
UNUSABLE
로 표시된 인덱스, 인덱스 파티션 또는 인덱스 하위 파티션을 지정하면UPDATE
문이 실패합니다.SKIP_UNUSABLE_INDEXES
세션 매개 변수TRUE
로 설정되었습니다.
참고 항목 :
세션 매개 변수
update_set_clause
update_set_clause
를 사용하면 열 값을 설정할 수 있습니다.
열
업데이트 할 개체의 열 이름을 지정합니다. update_set_clause
에서 테이블의 열을 생략하면 해당 열의 값이 변경되지 않습니다.
column
는 LOB 개체 속성을 참조한 다음 먼저 빈 또는 null 값으로 초기화해야합니다. 리터럴로 업데이트 할 수 없습니다. 또한 직접 UPDATE
SQL 문이 아닌 다른 방법을 사용하여 LOB 값을 업데이트하는 경우 먼저 LOB가 포함 된 행을 잠 가야합니다. 자세한 내용은 for_update_clause를 참조하세요.
column
가 파티션을 나눈 테이블의 파티션 키의 일부인 경우 UPDATE
행 이동을 활성화하지 않는 한 행을 다른 파티션 또는 하위 파티션으로 이동하는 열의 값을 변경하면 실패합니다. CREATE TABLE 또는 ALTER TABLE의 row_movement_clause
를 참조하세요.
또한 column
가 partition_value
div에 아직없는 열에 대한 값을 지정하면 목록으로 분할 된 테이블의 분할 키인 경우 UPDATE
가 실패합니다. > 파티션 중 하나의 목록입니다.
subquery
업데이트 된 각 행에 대해 정확히 하나의 행을 반환하는 하위 쿼리를 지정합니다.
-
If
update_set_clause
에 하나의 열만 지정하면 하위 쿼리는 하나의 값만 반환 할 수 있습니다. -
update_set_clause
인 경우 하위 쿼리는 지정한 열 수만큼 값을 반환해야합니다. -
서브 쿼리가 행을 반환하지 않으면 열에 null이 할당됩니다.
-
이
subquery
가 원격 개체를 참조하는 경우UPDATE
작업은 참조하는 한 병렬로 실행할 수 있습니다. ce는 로컬 데이터베이스의 개체로 루프백하지 않습니다. 그러나DML_table_expression_clause
의subquery
가 원격 개체를 참조하는 경우UPDATE
작업은 알림없이 순차적으로 실행됩니다.
하위 쿼리 내에서 flashback_query_clause
를 사용하여 와 과거 데이터. 이 절에 대한 자세한 내용은 SELECT
의 flashback_query_clause를 참조하십시오.
참조 :
-
SELECT 및 “서브 쿼리 사용”
-
CREATE TABLE 문서의 parallel_clause
expr
해당 열에 할당 된 새 값으로 해석되는 표현식을 지정합니다.
참조 :
expr
및 “객체 테이블 업데이트 : 예”
DEFAULT 열을 이전에 기본값으로 지정한 값으로 설정하려면 DEFAULT
를 지정하십시오. 열 값입니다. 해당 열에 대한 기본값이 지정되지 않은 경우 데이터베이스는 열을 null로 설정합니다.
기본값으로 업데이트 제한 사항 다음 경우 DEFAULT
를 지정할 수 없습니다. 뷰를 업데이트하고 있습니다.
VALUE 절
VALUE
절을 사용하면 개체 테이블의 전체 행을 지정할 수 있습니다.
VALUE 절에 대한 제한이 절은 개체 테이블에 대해서만 지정할 수 있습니다.
참고 :
RAW
열에 문자열 리터럴을 삽입하면 후속 쿼리 중에 Oracle 데이터베이스가 전체 테이블 스캔을 수행합니다. RAW
열에있을 수있는 색인을 사용하는 대신
참조 :
“객체 테이블 업데이트 : 예”
where_clause
where_clause
를 사용하면 업데이트 된 행을 지정된 condition
는 사실입니다. 이 절을 생략하면 데이터베이스가 테이블 또는 뷰의 모든 행을 업데이트합니다. condition
구문에 대해서는 7 장 “조건”을 참조하십시오.
where_clause
는 업데이트되는 값. where_clause
를 지정하지 않으면 모든 행이 업데이트됩니다. where_clause
를 충족하는 각 행에 대해 update_set_clause
에서 등호 연산자 (=)의 왼쪽 열이 값으로 설정됩니다. 연산자 오른쪽에있는 해당 표현식의. 행이 업데이트되면 표현식이 평가됩니다.
returning_clause
반환 절은 DML 문의 영향을받는 행을 검색합니다. 테이블 및 구체화 된 뷰와 단일 기본 테이블이있는 뷰에 대해이 절을 지정할 수 있습니다.
단일 행에서 작동 할 때 returning_clause
가있는 DML 문 영향을받는 행, rowid 및 REFs
를 사용하여 영향을받는 행에 대한 열 표현식을 검색하고 호스트 변수 또는 PL / SQL 변수에 저장할 수 있습니다.
작동시 여러 행에서 returning_clause
가있는 DML 문은 바인드 배열의 영향을받는 행과 관련된 표현식, rowid 및 REFs
의 값을 저장합니다. p>
expr expr
목록의 각 항목은 유효한 표현식 구문이어야합니다.
INTO INTO
절은 변경된 행의 값이 data_item
목록에 지정된 변수에 저장됨을 나타냅니다.
data_item 각 data_item
는 검색된 expr
값을 저장하는 호스트 변수 또는 PL / SQL 변수입니다.
RETURNING
목록의 각 표현식에 대해 INTO
list.
제한 사항 다음 제한 사항은 RETURNING
절에 적용됩니다.
-
expr
는 다음과 같이 제한됩니다.-
UPDATE
및DELETE
각expr
문은 단순 표현식이거나 단일 집합 집계 함수 표현식이어야합니다. 동일한returning_clause
에서 단순 표현식과 단일 집합 집계 함수 표현식을 결합 할 수 없습니다.INSERT
문의 경우 각expr
는 단순 표현식이어야합니다.INSERT
문RETURNING
절에서는 집계 함수가 지원되지 않습니다. -
Single- 집합 집계 함수 표현식은
DISTINCT
키워드를 포함 할 수 없습니다.
-
-
expr
목록에 기본 키 열 또는 기타NOT
NULL
열이 포함 된 경우 테이블에BEFORE
UPDATE
트리거가 정의되어 있습니다. -
다중 테이블 삽입 용.
-
이 절은 병렬 DML 또는 원격 객체와 함께 사용할 수 없습니다.
-
이 절로
LONG
유형을 검색 할 수 없습니다. -
이 절을보기에 대해 지정할 수 없습니다.
INSTEAD
OF
트리거가 정의되었습니다.
참고 항목 :
PL / SQL 사용자 ” BULK
COLLECT
절을 사용하여 컬렉션 변수에 여러 값을 반환하는 방법에 대한 정보는 가이드 및 참조입니다.
error_logging_clause
error_logging_clause는 UPDATE
문에서 INSERT
문에서와 동일한 동작을합니다. 자세한 내용은 INSERT
문 error_logging_clause를 참조하세요.
참조 :
“오류 로깅을 사용하여 테이블에 삽입 : 예”
예
테이블 업데이트 : 예 다음 성명서는 SH_CLERK
직무를 수행하는 모든 직원에게 null 커미션을 제공합니다.
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
다음 성명은 Douglas Grant를 관리자로 승격합니다. $ 1,000를 인상 한 부서 20 :
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
다음 진술은 employees
직원의 급여를 인상합니다. remote
데이터베이스의 테이블 :
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
다음 예는 UPDATE
문 :
-
두 형식의
update_set_clause
를 하나의 문으로 함께 -
상관 하위 쿼리
-
업데이트 된 행을 제한하는
where_clause
위의 UPDATE
문은 다음 작업을 수행합니다.
-
제네바 또는 뮌헨에서 근무하는 직원 만 업데이트 (위치 2900 및 2700)
-
세트
department_id
이러한 직원을 봄베이에 해당하는department_id
(location_id
2100) -
각 직원의 급여를 부서 평균 급여의 1.1 배로 설정
-
각 직원의 커미션을 부서 평균 커미션의 1.5 배로 설정
파티션 업데이트 : 예제 다음 예제는 sales
테이블의 단일 파티션에있는 값을 업데이트합니다.
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
객체 테이블 업데이트 : 예 다음 문은 두 개의 객체 테이블, people_demo1
및 people_demo2
를 만듭니다. , Table Collections : Examples에서 생성 된 people_typ
객체. 이 예에서는 people_demo2
에서 행을 선택하여 people_demo1
행을 업데이트하는 방법을 보여줍니다.
이 예에서는 SET
절과 하위 쿼리 모두의 VALUE
개체 참조 함수입니다.
관련 업데이트 : 예제 상관 하위 쿼리를 사용하여 중첩 된 테이블 행을 업데이트합니다. “테이블 컬렉션 : 예제”를 참조하십시오.
업데이트 중 RETURNING 절 사용 : 예제 다음 예제는 업데이트 된 행의 값을 반환하고 결과를 PL에 저장합니다. / SQL 변수 bnd1
, bnd2
, bnd3
:
다음 예는 반환 절의 표현식에서 단일 집합 집계 함수를 지정할 수 있음을 보여줍니다.
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;