plsql 디 스 플레이 커서

8337 단어 plsql
현식 커서 의 처리 과정 은 다음 과 같다.
커서 를 설명 하고 커서 를 열 고 커서 를 검색 하 며 커서 를 닫 습 니 다.
성명 커서
CURSOR c_cursor_name IS statement;
커서 는 검색 결과 집합 에 해당 하 며 검색 결 과 를 커서 에 넣 어 블록 에서 처리 하기 편리 합 니 다.
기록 하 다.
하나의 기록 은 복합 적 인 데이터 구조 로 결과 집합 에 있 는 한 줄 의 데이터 에 해당 하 며 커서 를 옮 겨 다 닐 때 결 과 를 저장 하 는 데 사용 된다.기록 지원 세 가지 정의: 표 기반, 커서 기반, 사용자 정의.
표 나 커서 기반 이 라면 다음 과 같이 정의 합 니 다.
record_name table_name or cursor_name%ROWTYPE;
커서 열기
OPEN cursor_name;
검색 커서
두 가지 커서 검색 방식 이 존재 합 니 다:
FETCH cursor_name INTO pl/sql variables;
or
FETCH cursor_name INTO pl/sql record;
커서 가 검색 되 었 을 때, 모든 FETCH 문장 뒤에 활성 데이터 집합 포인터 가 다음 데이터 줄 로 계속 이동 합 니 다.따라서 FETCH 는 데이터 세트 전 체 를 가 져 올 때 까지 활성 화 된 데이터 가 집 중 된 데이터 줄 을 되 돌려 줍 니 다.마지막 FETCH 문 구 는 출력 변수 에 값 을 부여 하지 않 고 후 자 는 원래 의 값 을 저장 합 니 다.
그렇다면 커서 검색 을 끝까지 하면 어떻게 검색 을 중단 합 니까?
이 때 는 커서 의 속성 을 사용 해 야 합 니 다.
커서 속성 포함:
% NOTFOUND 현재 FETCH 작업 이 데이터 줄 을 되 돌려 주지 않 았 을 때 true 입 니 다. 그렇지 않 으 면 false 입 니 다.
%FOUND       상술 한 것 과 상반되다.
% ROWCOUNT 가 커서 의 기록 수량 을 되 돌려 줍 니 다.
%ISOPEN     커서 가 열 렸 는 지 확인 하기;
커서 닫 기
CLOSE cursor_name;
다음은 하나의 예시 이다.
 1 declare

 2   cursor c_zip is 

 3          select * from zipcode;--    

 4   vr_zip c_zip%rowtype;--

 5 begin

 6   open c_zip;--    

 7   loop

 8     fetch c_zip into vr_zip;--

 9     exit when c_zip%NOTFOUND;--    ,   FETCH        ,exit

10     dbms_output.putline(vr_zip.zip || ' ' || vr_zip.city || ' ' || vr_zip.state);

11   end loop;

12   close c_zip;--    

13 end;

 
간편 한 방법: 커서 FOR 순환 사용
커서 FOR 순환 에 힘 입 어 커서 가 열 리 고 검색 과 닫 히 는 과정 이 은연 중 에 이 뤄 진다.이것 은 코드 블록 을 더욱 쉽게 작성 하고 유지 할 수 있 게 한다.
사용 방법 은 C \ # 의 foreach 와 비슷 하여 자동 으로 옮 겨 다 닙 니 다.
다음은 위의 예시 적 인 for 순환 표기 법 입 니 다.
1 declare

2   cursor c_zip is 

3          select * from zipcode;--    

4 begin

5   for r_zip in c_zip--      

6   loop

7     dbms_output.putline(vr_zip.zip || ' ' || vr_zip.city || ' ' || vr_zip.state);

8   end loop;--        

9 end;

 
입력 매개 변수
매개 변 수 를 입력 하려 면 커서 이름 뒤에 함수 와 유사 한 매개 변수 목록 같은 것 을 추가 하고 커서 를 검색 할 때 호출 (즉 FETCH INTO 구문) 에 해당 하 며 커서 이름 뒤에 실제 매개 변 수 를 입력 합 니 다.
다음은 예시 입 니 다.
 1 declare

 2   cursor c_zip(p_state in zipcode.state%type) is --    

 3          select zip, city, state

 4          from zipcode

 5          where state = p_state;

 6   v_state zipcode.state%type := &a;

 7 begin

 8   for r_zip in c_zip(v_state)--         

 9       loop

10             dbms_output.put_line(r_zip.zip || ', ' || r_zip.city || ', ' || r_zip.state);

11       end loop;

12 exception

13    when no_data_found then dbms_output.put_line('no data found');

14 end;

 
칠석 잘 보 내세 요!여러분, 안전 조 치 를 잘 하 세 요.

좋은 웹페이지 즐겨찾기