PL / SQL-커서
이 장에서는 PL / SQL의 커서에 대해 설명합니다. Oracle은 명령문 처리에 필요한 모든 정보를 포함하는 SQL 문을 처리하기 위해 컨텍스트 영역이라고하는 메모리 영역을 만듭니다. 예를 들어 처리 된 행 수 등입니다.
커서는이 컨텍스트 영역에 대한 포인터입니다. PL / SQL은 커서를 통해 컨텍스트 영역을 제어합니다. 커서는 SQL 문이 리턴 한 행 (하나 이상)을 보유합니다. 커서가 보유한 행 세트를 활성 세트라고합니다.
SQL 문에서 리턴 된 행을 페치하고 처리하기 위해 프로그램에서 참조 될 수 있도록 커서의 이름을 지정할 수 있습니다. 한 번에. 커서에는 두 가지 유형이 있습니다-
- 암시 적 커서
- 명시 적 커서
암시 적 커서
암시 적 커서 SQL 문이 실행될 때마다 문에 대한 명시 적 커서가 없을 때 Oracle에 의해 자동으로 생성됩니다. 프로그래머는 암시 적 커서와 그 안에있는 정보를 제어 할 수 없습니다.
DML 문 (INSERT, UPDATE 및 DELETE)이 실행될 때마다 암시 적 커서가이 명령문과 연결됩니다. INSERT 조작의 경우 커서는 삽입해야하는 데이터를 보유합니다. UPDATE 및 DELETE 작업의 경우 커서는 영향을받을 행을 식별합니다.
PL / SQL에서 가장 최근의 암시 적 커서를 SQL 커서로 참조 할 수 있습니다.이 커서에는 항상 % FOUND와 같은 속성이 있습니다. , % ISOPEN, % NOTFOUND 및 % ROWCOUNT. SQL 커서에는 FORALL 문과 함께 사용하도록 설계된 추가 속성 % BULK_ROWCOUNT 및 % BULK_EXCEPTIONS가 있습니다. 다음 표는 가장 많이 사용되는 속성에 대한 설명을 제공합니다-
S.No | 속성 & 설명 |
---|---|
1 |
% FOUND INSERT, UPDATE 또는 DELETE 문이 하나 이상의 행에 영향을 주거나 SELECT INTO 문이 하나 이상의 행을 반환하면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다. |
2 |
% NOTFOUND % FOUND의 논리적 반대입니다. INSERT, UPDATE 또는 DELETE 문이 행에 영향을주지 않았거나 SELECT INTO 문이 행을 반환하지 않으면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다. |
3 |
% ISOPEN 내재적 커서에 대해서는 항상 FALSE를 반환합니다. Oracle은 관련 SQL 문을 실행 한 후 SQL 커서를 자동으로 닫기 때문입니다. |
4 |
% ROWCOUNT INSERT, UPDATE 또는 DELETE 문에 의해 영향을 받거나 SELECT INTO 문에 의해 반환 된 행 수를 반환합니다. |
모든 SQL 커서 속성은 아래 예제와 같이 sql % attribute_name으로 액세스됩니다.
예
h3>
이전 장에서 만들고 사용했던 CUSTOMERS 테이블을 사용할 것입니다.
다음 프로그램은 테이블을 업데이트하고 각 고객의 급여를 500만큼 인상하고 SQL %를 사용합니다. 영향을받는 행 수를 결정하는 ROWCOUNT 속성 −
SQL 프롬프트에서 위 코드를 실행하면 다음 결과가 생성됩니다. −
6 customers selected PL/SQL procedure successfully completed.
고객 테이블의 레코드를 확인하면 행이 업데이트되었음을 알 수 있습니다.
명시 적 커서
명시 적 커서는 더 많은 제어 권한을 얻기위한 프로그래머 정의 커서입니다. 컨텍스트 영역. PL / SQL 블록의 선언 섹션에서 명시 적 커서를 정의해야합니다. 둘 이상의 행을 반환하는 SELECT 문에서 생성됩니다.
명시 적 커서를 생성하는 구문은 다음과 같습니다.-
CURSOR cursor_name IS select_statement;
작동 중 명시 적 커서는 다음 단계를 포함합니다. −
- 메모리 초기화를위한 커서 선언
- 메모리 할당을위한 커서 열기
- 커서 가져 오기 데이터 검색 용
- 커서를 닫아 할당 된 메모리 해제
커서 선언
커서 선언은 이름으로 커서를 정의하고 연관된 SELECT 문. 예 :
CURSOR c_customers IS SELECT id, name, address FROM customers;
커서 열기
커서를 열면 커서에 대한 메모리가 할당되고 반환 된 행을 가져올 준비가됩니다. 그것에 SQL 문에 의해. 예를 들어, 위에서 정의한 커서를 다음과 같이 엽니 다.
OPEN c_customers;
커서 가져 오기
커서를 가져 오려면 다음 위치에서 한 행에 액세스해야합니다. 시간. 예를 들어, 위에서 연 커서에서 다음과 같이 행을 가져옵니다.
FETCH c_customers INTO c_id, c_name, c_addr;
커서 닫기
커서를 닫으면 할당 된 메모리예를 들어, 위에서 연 커서를 다음과 같이 닫습니다.-
CLOSE c_customers;
예
다음은 개념을 설명하는 완전한 예입니다. 명시 적 커서의 & minua;
SQL 프롬프트에서 위 코드를 실행하면 다음 결과가 생성됩니다.
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.