programing

데이터베이스 커서가 기본 데이터에 대한 변경 사항을 픽업합니까?

fastcode 2023. 8. 28. 22:16
반응형

데이터베이스 커서가 기본 데이터에 대한 변경 사항을 픽업합니까?

커서에 대한 빠른 질문(특히 Oracle 커서)

예를 들어, "my_table"이라는 테이블에 두 개의 열, 즉 ID와 이름이 있습니다.수백만 개의 행이 있지만 이름 열은 항상 'test' 문자열입니다.

그런 다음 다음 PL/SQL 스크립트를 실행합니다.

declare
 cursor cur is
  select t.id, t.name
    from my_table t
   order by 1;
 begin
   for cur_row in cur loop
     if (cur_row.name = 'test') then
        dbms_output.put_line('everything is fine!');
     else
        dbms_output.put_line('error error error!!!!!');
        exit;
     end if;
   end loop;
 end; 
 /

실행 중인 경우 다음 SQL을 실행합니다.

 update my_table 
   set name = 'error'
  where id = <max id>;
commit;

PL/SQL 블록의 커서가 변경 사항을 선택하여 "오류 오류"를 출력하고 종료합니까?아니면 전혀 변화를 얻지 못할까요?아니면 my_table로 업데이트할 수 있을까요?

감사합니다!

커서는 SELECT를 효과적으로 실행한 다음 DB 상태의 스냅샷에 저장된 결과 집합을 반복할 수 있습니다.결과 집합을 이미 가져왔으므로 UPDATE 문의 영향을 받지 않습니다. 그렇지 않은 경우에는 커서를 이동할 때마다 쿼리를 다시 실행해야 합니다.

참조:

http://www.techonthenet.com/oracle/cursors/declare.php

언급URL : https://stackoverflow.com/questions/1690822/do-database-cursors-pick-up-changes-to-the-underlying-data

반응형