>데이터 베이스 >MySQL 튜토리얼 >커서 없이 각 테이블 행에 대해 저장 프로시저를 실행할 수 있습니까?

커서 없이 각 테이블 행에 대해 저장 프로시저를 실행할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-05 21:05:45819검색

Can Stored Procedures Be Executed for Each Table Row Without Cursors?

커서 없이 각 테이블 행에 대해 저장 프로시저 실행

모든 행에 대해 저장 프로시저를 호출하는 작업에 직면했을 때 테이블에서는 커서를 사용하여 행을 반복하는 접근 방식을 고려하는 것이 당연합니다. 하지만 이 작업은 커서에 의존하지 않고도 달성할 수 있습니다.

집합 기반 접근 방식 활용

집합 기반 접근 방식에서 우리는 모든 행에 대해 동시에 작업을 수행하는 방법입니다. 예를 들어, 테이블의 모든 행에 대한 열을 업데이트하는 것이 목표라면 적절한 WHERE 절이 포함된 UPDATE 문을 활용하여 관련 레코드를 한 번에 수정할 수 있습니다.

특정 사례: 행 열 반복

그러나 행의 열을 저장 프로시저의 입력 매개 변수로 사용해야 하는 시나리오를 처리할 때는 약간 다릅니다. 접근이 필요합니다. 제공된 답변에 설명된 대로:

  • 변수 선언 및 초기화: 현재 처리 중인 고객을 추적하는 변수를 정의합니다.
  • 반복 over Rows: SELECT 문과 함께 WHILE 루프를 사용하여 CustomerID 변수를 검색하고 업데이트합니다. table.
  • 종료 조건: 고객이 더 이상 없을 때 루프를 중단하는 조건을 설정합니다.
  • 저장 프로시저 실행: 각각에 대해 고객인 경우 CustomerID 매개변수를 사용하여 지정된 저장 프로시저를 호출하세요.

코드 샘플

제공된 코드 조각은 이 접근 방식을 구현하는 방법을 보여줍니다.

-- Declare & initialize (2008 syntax)
DECLARE @CustomerID INT = 0

-- Iterate over all customers
WHILE (1 = 1) 
BEGIN  

  -- Get next customerId
  SELECT TOP 1 @CustomerID = CustomerID
  FROM Sales.Customer
  WHERE CustomerID > @CustomerId 
  ORDER BY CustomerID

  -- Exit loop if no more customers
  IF @@ROWCOUNT = 0 BREAK;

  -- call your sproc
  EXEC dbo.YOURSPROC @CustomerId

END

위 내용은 커서 없이 각 테이블 행에 대해 저장 프로시저를 실행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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