>  기사  >  php教程  >  SQL 커서를 사용하여 루프 데이터를 탐색하는 방법

SQL 커서를 사용하여 루프 데이터를 탐색하는 방법

高洛峰
高洛峰원래의
2016-12-14 11:56:301285검색

데이터에 대해 순회 루프 작업을 수행하는 경우 SQL 커서를 통해 수행할 수 있습니다. 다음은 참고용으로 이 방법에 대한 자세한 소개입니다.

SQL 커서의 장점은 결과 집합의 데이터를 쉽게 반복하고 작업을 수행할 수 있다는 것입니다.
1. 커서를 사용하면 전체 결과 집합에 대해 동일한 작업을 한 번에 수행하는 대신 쿼리 문 select에서 반환된 행 결과 집합의 각 행에 대해 동일하거나 다른 작업을 수행할 수 있습니다.
2 . 또한 커서 기반 위치에 따라 테이블의 데이터를 삭제하거나 업데이트하는 기능도 제공합니다.
3. 커서는 컬렉션 지향 데이터베이스 관리 시스템과 행 지향 프로그래밍을 연결하여 두 가지 데이터 처리 방법이 통신할 수 있도록 합니다. .
그러나 커서에도 단점이 있습니다. 복잡성과 비효율성은 커서의 가장 큰 단점이자 저장 프로시저를 사용할 때 커서를 고려하지 않는 주된 이유이기도 합니다.

다음은 커서를 실제 작업에 적용한 예입니다. 커서는 테이블 A의 데이터 열 값을 테이블 B의 열로 복사하는 데 사용됩니다. 두 테이블은 동일한 UID 필드를 갖습니다. 조건은 동일한 UID로 데이터 복사입니다.

declare @level varchar(100)
declare @uid varchar(100)
declare cur 커서--커서 정의
read_only
egg_code.user_id,egg_prize_level 선택
eg_code 내부 조인 egg_prize on egg_prize.user_id=egg_code.user_id--얻은 데이터 세트에 대한 커서 지정

cur-열기-커서 열기
fetch next from cur into @uid,@level--가져오기 작업의 열 데이터를 로컬 변수에 넣습니다
while(@@fetch_status=0)--FETCH 문에 의해 실행된 마지막 커서의 상태를 반환합니다. 현재 연결된 모든 열린 커서의 상태입니다.

시작
--'레벨:'+@level+' 인쇄-------------사용자 ID:'+@uid

egg_code 세트 업데이트 Prize_level=@level 여기서 user_id=@uid--작업 수행

--다음 정보 진행
cur에서 @uid로 다음 항목 가져오기
end
현재 닫기- -커서 닫기
deallocate cur--커서 삭제
go

커서 사용 순서는 커서 선언, 커서 열기, 데이터 읽기, 커서 닫기, 커서 삭제입니다.
@@FETCH_STATUS는 연결의 모든 커서에 대해 전역이므로 @@FETCH_STATUS 사용에 주의하세요. FETCH 문을 실행한 후 다른 커서에서 다른 FETCH 문을 실행하기 전에 @@FETCH_STATUS를 테스트해야 합니다. 이 연결에서 가져오기 작업이 발생하기 전에는 @@FETCH_STATUS 값이 정의되지 않습니다.
예를 들어, 사용자는 한 커서에서 FETCH 문을 실행한 다음 다른 커서의 결과를 열고 처리하는 저장 프로시저를 호출합니다. 호출된 저장 프로시저에서 제어가 반환되면 @@FETCH_STATUS는 저장 프로시저가 호출되기 전 FETCH 문의 결과가 아니라 저장 프로시저에서 실행된 마지막 FETCH 문의 결과를 반영합니다.
위 커서는 Quanzhou SEO가 웹사이트 황금알 깨기 이벤트 중에 사용했습니다. 사용 과정에서 두 테이블의 일부 데이터가 나중에 프로그램으로 변경되어 일부 데이터가 동기화되지 못했습니다. 커서를 사용하기 전에 간단한 SQL 문을 사용하여 이러한 동기화 기능을 구현하려고 시도했지만 불가능했기 때문에 커서만 사용할 수 있습니다. 그것을 달성하기 위해.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.