??????????????????α????4?????????漰?????????????????????.

????????α???????? PLSQL???裺

????1??????/?????α??????????α??????????????????SELECT ???

?????????

    CURSOR cursor_name[(parameter[?? parameter]…)]
           [RETURN datatype]
    IS
        select_statement;

?????α????????????????????????

????parameter_name [IN] datatype [{:= | DEFAULT} expression]

??????????????????????????ó??????????NUMBER(4)??CHAR(10) ??????????

????[RETURN  datatype]???????????α?????????????????????????????select_statement?е?????б?????????????????????????????????????“%ROWTYPE”???????

????2?????α???????α????????SELECT ???????????????????????????????????????????????α????????????α???????д???FOR UPDATE???OPEN ??仹???????????????α????????????????С?

?????????

????OPEN cursor_name[([parameter =>] value[?? [parameter =>] value]…)];

?????????α???????????????????????????????????????λ??????????????????PL/SQL ????????OPEN ????????????α?

????3??????α???????????????????е??????У??????????????????С?

?????????

????FETCH cursor_name INTO {variable_list | record_variable };

???????FETCH????????η???????????У??????????α?????????????????С??????????????????????????????FETCH??????????????????α?????%NOTFOUND???TRUE??????????????FETCH????????α?????%NOTFOUND?????ж?FETCH????????г????????????????У??????????????????????????

????4????α??????????????α????????????????????α????????α????????????????????α????????????Ч???????????FETCH ???????????????????α???????OPEN ??????′???

?????????

????CLOSE cursor_name;

????????????????????????

CREATE OR REPLACE PROCEDURE testcur IS
  CURSOR c_cursor(r_no NUMBER DEFAULT 5)IS
    SELECT ISBN?? TITLE
      FROM BOOKS
&nbsp;&nbsp;&nbsp;&nbsp; WHERE rownum < r_no
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FOR UPDATE;
&nbsp; v_isbn BOOKS.ISBN%TYPE;
&nbsp; v_title&nbsp;&nbsp; BOOKS.TITLE%TYPE;

BEGIN
&nbsp; --OPEN c_cursor(5);
&nbsp; OPEN c_cursor(r_no=>7);
&nbsp; DBMS_OUTPUT.PUT_LINE('opened cursor'); --afater open
&nbsp; --DBMS_LOCK.SLEEP(30);

&nbsp; FETCH c_cursor
&nbsp;&nbsp;&nbsp; INTO v_isbn?? v_title;
&nbsp; DBMS_OUTPUT.PUT_LINE('fetched cursor');
&nbsp; --DBMS_LOCK.SLEEP(30);
&nbsp; WHILE c_cursor%FOUND LOOP
&nbsp;&nbsp;&nbsp; DBMS_OUTPUT.PUT_LINE(v_isbn || '---' || to_char(v_title));
&nbsp;&nbsp;&nbsp; FETCH c_cursor
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO v_isbn?? v_title;
&nbsp; END LOOP;
&nbsp; CLOSE c_cursor;
&nbsp; DBMS_OUTPUT.PUT_LINE('closed cursor');
&nbsp; ROLLBACK;
&nbsp; DBMS_OUTPUT.PUT_LINE('ended transaction');
END testcur;