logo

SQL에서 커서란 무엇입니까?

커서 임시 기억 또는 임시 작업 스테이션입니다. 다음에 의해 할당됩니다. 데이터 베이스 사용자가 테이블에 대해 DML(Data Manipulation Language) 작업을 수행하는 시점의 서버입니다. 커서는 데이터베이스 테이블을 저장하는 데 사용됩니다.

커서에는 암시적 커서와 명시적 커서의 두 가지 유형이 있습니다. 이에 대해서는 아래와 같이 설명합니다.



  1. 암시적 커서: 암시적 커서는 SQL SERVER의 기본 커서라고도 합니다. 이러한 커서는 사용자가 DML 작업을 수행할 때 SQL SERVER에 의해 할당됩니다.
  2. 명시적 커서: 명시적 커서는 사용자가 필요할 때마다 사용자가 생성합니다. 명시적 커서는 행 단위 방식으로 테이블에서 데이터를 가져오는 데 사용됩니다.

명시적 커서를 만드는 방법?

  1. 커서 개체 선언

통사론:

DECLARE 커서_이름 CURSOR FOR SELECT * FROM 테이블_이름

질문:



DECLARE s1 CURSOR FOR SELECT * FROM studDetails>

2. 오픈 커서 연결

써니들

통사론:

OPEN 커서_연결



질문:

OPEN s1>

커서에서 데이터 가져오기 커서에서 데이터에 접근하는 방법은 총 6가지가 있습니다. 그것들은 다음과 같습니다:

  1. 첫 번째 커서 테이블에서 첫 번째 행만 가져오는 데 사용됩니다.
  2. 마지막 커서 테이블에서 마지막 행만 가져오는 데 사용됩니다.
  3. 다음 커서 테이블에서 정방향으로 데이터를 가져오는 데 사용됩니다.
  4. 이전의 커서 테이블에서 역방향으로 데이터를 가져오는 데 사용됩니다.
  5. 절대 n 정확한 n을 가져오는 데 사용됩니다.커서 테이블의 행.
  6. 상대 n 증분 방식과 감소 방식으로 데이터를 가져오는 데 사용됩니다.

통사론:

커서_이름에서 NEXT/FIRST/LAST/PRIOR/ABSOLUTE n/RELATIVE n 가져오기

질문:

FETCH FIRST FROM s1 FETCH LAST FROM s1 FETCH NEXT FROM s1 FETCH PRIOR FROM s1 FETCH ABSOLUTE 7 FROM s1 FETCH RELATIVE -2 FROM s1>
  • 커서 연결 닫기

통사론:

닫기 커서_이름

질문:

CLOSE s1>
  • 커서 메모리 할당 해제

통사론:

DEALLOCATE 커서_이름

질문:

DEALLOCATE s1>

암시적 커서를 만드는 방법은 무엇입니까?

암시적 커서는 SQL 문을 실행할 때 PL/SQL에서 자동으로 생성되는 커서입니다. 암시적 커서를 명시적으로 선언하거나 열 필요는 없습니다. 대신 PL/SQL은 뒤에서 커서를 관리합니다.

PL/SQL에서 암시적 커서를 생성하려면 SQL 문을 실행하기만 하면 됩니다. 예를 들어 EMP 테이블에서 모든 행을 검색하려면 다음 코드를 사용할 수 있습니다.

질문:

BEGIN FOR emp_rec IN SELECT * FROM emp LOOP DBMS_OUTPUT.PUT_LINE('Employee name: ' || emp_rec.ename); END LOOP; END;>

PL/SQL에서 다음을 수행할 때 끼워 넣다 , 업데이트 또는 삭제 작업을 수행하면 암시적 커서가 자동으로 생성됩니다. 이 커서는 삽입할 데이터를 보유하거나 업데이트 또는 삭제할 행을 식별합니다. 코드에서는 이 커서를 SQL 커서라고 부를 수 있습니다. 이 SQL 커서에는 몇 가지 유용한 속성이 있습니다.

  1. %FOUND는 가장 최근의 SQL 작업이 하나 이상의 행에 영향을 미친 경우 true입니다.
  2. %NOTFOUND는 행에 영향을 주지 않은 경우 true입니다.
  3. %ROWCOUNT는 영향을 받은 행 수를 반환합니다.
  4. %ISOPEN은 커서가 열려 있는지 확인합니다.

이러한 속성 외에도 %BULK_ROWCOUNT 및 %BULK_EXCEPTIONS는 여러 DML 작업을 한 번에 수행하는 데 사용되는 FORALL 문에만 적용됩니다. %BULK_ROWCOUNT는 각 DML 작업의 영향을 받는 행 수를 반환하고, %BULK_EXCEPTION은 작업 중에 발생한 예외를 반환합니다.

질문:

CREATE TABLE Emp( EmpID INT PRIMARY KEY, Name VARCHAR(50), Country VARCHAR(50), Age int(2), Salary int(10) ); -- Insert some sample data into the Customers table INSERT INTO Emp (EmpID, Name,Country, Age, Salary) VALUES (1, 'Shubham', 'India','23','30000'), (2, 'Aman ', 'Australia','21','45000'), (3, 'Naveen', 'Sri lanka','24','40000'), (4, 'Aditya', 'Austria','21','35000'), (5, 'Nishant', 'Spain','22','25000'); Select * from Emp;>

산출:

img1

이 프로그램은 각 직원의 급여를 1500씩 올려 테이블을 업데이트합니다. 업데이트 후에는 SQL%ROWCOUNT 속성을 사용하여 작업의 영향을 받은 행 수를 확인합니다.

질문:

DECLARE total_rows number; BEGIN UPDATE Emp SET Salary = Salary + 1500; total_rows := SQL%ROWCOUNT; dbms_output.put_line(total_rows || ' rows updated.'); END;>

산출:

5 Emp selected PL/SQL procedure successfully completed.>

SQL 커서 예외

SQL 쿼리를 실행할 때마다 예상치 못한 오류가 발생할 가능성이 있습니다. 커서는 각 행 집합을 통과하여 SQL 쿼리로 반환됩니다.

매우 널리 알려진 몇 가지 예외가 있습니다.

  1. 중복된 값: 이러한 유형의 오류는 커서가 데이터베이스에 이미 존재하는 레코드나 튜플을 삽입하려고 할 때 발생합니다. 이러한 유형의 오류는 적절한 오류 구성을 처리하여 피할 수 있습니다.
  2. 잘못된 커서 상태: 커서가 유효하지 않은 상태에 있을 때마다 이러한 유형의 오류는 오류로 표시됩니다.
  3. 잠금 시간 초과: 이는 커서가 행이나 테이블에 대한 잠금을 얻으려고 시도하지만 다른 트랜잭션이 이미 잠금을 보유하고 있는 경우 발생합니다.

SQL 서버에 커서가 필요함

  1. 커서를 사용하면 데이터를 행별로 처리할 수 있으며, 이는 데이터에 대해 복잡한 계산이나 변환을 수행해야 할 때 유용할 수 있습니다.
  2. 커서를 사용하면 결과 집합을 여러 번 반복할 수 있으며, 이는 동일한 데이터에 대해 여러 작업을 수행해야 할 때 유용할 수 있습니다.
  3. 커서는 계층적 데이터 구조를 처리하거나 재귀 쿼리를 수행할 때와 같이 복잡한 관계로 여러 테이블을 조인해야 할 때 유용할 수 있습니다.
  4. 커서를 사용하면 일부 조건이나 기준에 따라 레코드 업데이트, 삭제 또는 삽입과 같은 작업을 수행할 수 있습니다.
  5. 커서는 관계가 간단하지 않은 여러 테이블의 데이터를 처리할 때 특히 유용합니다.

SQL Server 커서 제한

커서에는 몇 가지 제한 사항이 있으므로 다른 선택의 여지가 없는 경우에만 사용해야 합니다. 이러한 제한 사항은 다음과 같습니다.

  1. 데이터를 처리할 때 하위 집합이나 전체 테이블에 잠금을 적용합니다.
  2. 커서는 테이블 레코드를 한 번에 한 행씩 업데이트하므로 성능이 저하됩니다.
  3. 루프는 커서보다 느리지만 오버헤드가 더 많습니다.
  4. 커서 속도에 영향을 미치는 또 다른 요소는 커서로 가져오는 행과 열의 양입니다.

자주하는 질문:

Q.1 커서를 어떻게 피할 수 있나요?

답변:

커서의 주요 기능은 행별 테이블 탐색입니다. 다음은 커서를 방지하는 몇 가지 간단한 방법입니다.

Q.2 SQL 커서에서 While 루프를 사용하는 방법은 무엇입니까?

답변:

임시 테이블에 결과 집합을 삽입할 수 있는 while 루프를 사용하는 것은 커서가 필요하지 않은 가장 간단한 방법입니다.

Q.3 SQL 커서의 사용자 정의 함수란 무엇입니까?

답변:

결과 행 세트가 커서를 사용하여 계산되는 경우도 있습니다. 사양을 준수하는 사용자 정의 함수를 사용하면 이를 달성할 수 있습니다.

Q.4 SQL 커서로 조인을 사용합니까?

답변:

대용량 레코드를 처리해야 하는 경우 조인은 지정된 조건을 만족하는 열만 처리하여 코드 줄 수를 줄입니다.