--在一中我们介绍了实现过程 select *from stud; declare cursor mycur is select id,name from stud;--1声明 v_id integer; v_name varchar(30); begin open mycur;--2打开游标 loop--3遍历 fetch mycur into v_id,v_name; exit when mycur%notfound;--找不到数据退出 --显示数据 DBMS_OUTPUT.PUT_LINE('编号'||v_id||'姓名'||v_name); end loop; if mycur%isopen then --5确定关闭 DBMS_OUTPUT.PUT_LINE('正常关闭'); close mycur; else SYS.DBMS_OUTPUT.PUT_LINE('已经关闭'); end if; exception --4关闭 when others then SYS.DBMS_OUTPUT.PUT_LINE('异常关闭'); close mycur; end; --记录集类型 declare --声明游标 cursor cur is select * from stud; --声明记录集类型 res_stud stud%rowType; begin --打开游标 open cur; --遍历 loop --直接将每一次获取的值,放到记录集中去 fetch cur into res_stud; exit when cur%notfound; --输出 dbms_output.put_line('id '||res_stud.id||' name is:'||res_stud.name); end loop; close cur; end; ------------------------------ --直接使用 for in --不用打开 DECLARE CURSOR mycur1 is select * from stud; begin for vv in mycur1 loop SYS.DBMS_OUTPUT.PUT_LINE('编号'||vv.id||''||'姓名'||vv.name); end loop; end; --隐式 begin for vv in (select * from stud) loop SYS.DBMS_OUTPUT.PUT_LINE('编号'||vv.id||''||'姓名'||vv.name); end loop; end; ----接受参数的游标 /* 1,工具接受 ...where id=&id; 2。在游标申明时给定参数 在plsql块中使用 3。在procedure过程中使用游标 */ --2 accept iid prompt '输入id值'; declare cursor mycur2(p_id integer)is select * from stud where id>p_id; v_stud stud%rowType; begin open mycur2(&iid); loop fetch mycur2 into v_stud; exit when mycur2%notfound; DBMS_OUTPUT.PUT_LINE(v_stud.id||''||v_stud.name); end loop; close mycur2; end; --3过程中使用 --声明一个接收参数的游标 --一个要求,sql语句是动态的 create or replace procedure px1(px_id integer) as cursor cc(p_id integer) is select * from stud where id>p_id; v_stud stud%rowType; begin --自己显式的打开,在这儿可以接收参数 open cc(px_id); loop fetch cc into v_stud; exit when cc%notfound; dbms_output.put_line(v_stud.id||v_stud.name); end loop; close cc; end; --调用 set serveroutput on; begin px1(4); end; ----------------------------------------------------------------------------- --删除用户创建的所有表-----------慎用仅作讲解 --声明一个过程 set serveroutput on; create or replace procedure dropall as --声明一个cursor,查询用户的所有表 cursor cur is select table_name from user_tables; --声明一个变量保存表名 v_tabname user_tables.table_name%type; begin open cur; loop fetch cur into v_tabname; exit when cur%notfound; dbms_output.put_line(v_tabname); --组成sql--在sql块中,是不可以执行DDL execute immediate 'drop table '||v_tabname||' purge'; end loop; close cur; end; create table studsss(id int); drop table stud purge; select * from tab; purge recyclebin; select * from dba_users; begin dropall(); end;