Oracle 네 가지 update 방법 요약
3650 단어 데이터 뱅 크
Oracle 은 표준 update 문 구 를 제공 하 는 것 외 에 다른 데이터 업데이트 방식 을 제공 하여 서로 다른 응용 장면 에 대응 합 니 다. - [Oacle 의 update 원리]
update_statement ::=
UPDATE {table_reference | [THE] (subquery1)} [alias]
SET {
column_name = {sql_expression | (subquery2)}
| (column_name [, column_name]...) = (subquery3)}
[, {column_name = {sql_expression | (subquery2)}
| (column_name [, column_name]...) = (subquery3)
}]...
[WHERE {search_condition | CURRENT_OF cursor_name}] [returning_clause]
Update 문 구 는 표 의 데 이 터 를 수정 하 는 데 사 용 됩 니 다.W3school 의 문법: UPDATE 표 이름 SET 열 이름 = 새 값 WHERE 열 이름 = 어떤 값 입 니 다. -[ w3school]
update join view
update join view 는 먼저 두 장의 표를 연결 을 통 해 하나의 보 기 를 만 든 다음 에 보 기 를 업데이트 하여 원본 표를 업데이트 하 는 목적 을 달성 하 는 것 입 니 다.
update (select bonus
from employee_bonus b
inner join employees e on b.employee_id = e.employee_id
where e.bonus_eligible = 'N') t
set t.bonus = 0
위의 원리 에서 말 한 것 처럼 괄호 안에 있 는 것 은 하나의 보기 입 니 다. set 에 서 는 업데이트 가 필요 한 필드 입 니 다. 이 방법 은 직접적 이 고 효율 적 이지 만 제한 이 비교적 죽 습 니 다. 그 중의 employees 표 의 메 인 키 는 where 조건 에 나타 나 야 합 니 다. 그렇지 않 으 면 오류 가 발생 합 니 다. ORA - 01779: 키 가 아 닌 저장 표 와 대응 하 는 열 을 수정 할 수 없습니다.
merge into
merge into 는 Oracle 특유 의 문구 입 니 다.
MERGE INTO table_name alias1
USING (table | view | sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name SET col1 = col_val1, col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
이 원 리 는 alias 2 에서 선택 한 데이터 입 니 다. 각각 alias 1 과 ON (join condition) 을 비교 하고 일치 하면 업데이트 작업 (Update) 을 하고 일치 하지 않 으 면 삽입 작업 (Insert) 을 합 니 다.
설명 으로 병합: 최적화 자 는 다음 조건 중 하나 가 사실 인 경우 대량의 데 이 터 를 결합 하기 위해 해시 조인 을 통 해 정렬 병합 조인 을 선택 할 수 있 습 니 다. 두 테이블 간 의 조인 조건 은 동일 한 조인 이 아 닙 니 다. 다른 작업 에 이미 필요 한 정렬 때문에 최적화 자 는 해시 조인 보다 정렬 병합 을 사용 하 는 것 이 더 저렴 하 다 는 것 을 알 게 됩 니 다.
merge 를 사용 하면 정렬 을 해 야 합 니 다. 즉, 두 표 의 데 이 터 를 읽 고 일정한 순서에 따라 merge 를 진행 한 다 는 것 입 니 다. 이것 은 비용 이 있 습 니 다.merge 를 실행 하면 영향 을 주 는 줄 수 를 되 돌려 주지 않 습 니 다.Merge 문 구 는 쓰기 가 비교적 번 거 롭 고 최대 두 개의 표 만 연결 할 수 있 으 며 복잡 한 문 구 는 merge 업데이트 법 으로 힘 이 따 르 지 않 고 효율 이 떨어진다.
유표 법
커서 는 커서 와 빠 른 커서 를 표시 합 니 다.
스피드 커서
begin
for cur in (table|subquery) loop
update_statement
end loop;
end;
커서 보이 기
SET SERVEROUTPUT ON
DECLARE
CURSOR emp_cursor IS
SELECT empno, ename FROM emp;
BEGIN
FOR Emp_record IN emp_cursor LOOP
update_statement;
END LOOP;
END;
커서 를 사용 하면 좋 은 점 이 많 습 니 다. for 순환 은 우리 에 게 대량의 데 이 터 를 업데이트 하 는 방법 을 제공 합 니 다. 게다가 Oacle 의 rowid 물리 필드 (Oacle 은 기본적으로 표 마다 rowid 필드 가 있 고 유일한 색인) 를 제공 합 니 다. 업데이트 할 기록 을 신속하게 찾 을 수 있 으 며 복잡 한 조회 문 구 를 지원 할 수 있 습 니 다.
업데이트 방법:
방법.
장면
표준 업데이트 문법
단일 표 업데이트 나 간단 한 문 구 는 이 방안 을 사용 하 는 것 이 좋 습 니 다.
update join view
두 표 가 연결 되 어 있 고 업 데 이 트 된 표 가 관련 표 메 인 키 를 통 해 연 결 된 경우 이 방안 을 사용 하 는 것 이 좋 습 니 다.
merge into
두 표 가 연결 되 어 있 고 업 데 이 트 된 표 는 관련 표 의 메 인 키 를 통 해 연 결 된 것 이 아니 라 이 방안 을 사용 하 는 것 이 좋 습 니 다.
유표
다 중 표 관련 및 논리 복잡 한 경우 이 방안 을 사용 하 는 것 이 좋 습 니 다.
보통 두 표 사이 의 업데이트 에 대해 데이터 업데이트 속 도 는 Update join view, merge into, 커서, 표준 Update 문 입 니 다.
이 문 서 는 정리 하고 참고 하 는 것 이 약간 많 습 니 다. 여 기 는 더 이상 일일이 열거 하지 않 고 스스로 필기 하고 정리 하 며 본의 아니 게 무례 를 범 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.