Oracle游标cursor2显示的游标等

--在一中我们介绍了实现过程
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;

转载于:https://www.cnblogs.com/xiaweifeng/p/3681611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值