首页 > 数据库 >Oracle笔记:循环及游标

Oracle笔记:循环及游标

时间:2022-11-17 13:09:47浏览次数:46  
标签:end cur 游标 笔记 emps Oracle output emp


循环及退出循环:

--while
--初值
while 条件
loop
循环体;
循环变量的变化;
end loop;

--break
if 条件 then
exit;
end if;

--continue
<<label>>
....
if 条件 then
goto label;
end if;

--例
declare
i integer;
j integer;
begin
j:=1;
<<b>>
while j<=9
loop
i:=1;
<<a>>
while i<=j
loop
if i=3 then
i:=i+1;
j:=j+1;
goto b;
end if;
dbms_output.put(i||'*'||j||'='||i*j||' ');
i:=i+1;
end loop;
dbms_output.put_line('');
j:=j+1;
end loop ;
end;

游标的使用:

--游标
Result rs = stmt.excuteQuery();
while(rs.next())
{
rs.getString(1);
}

select * from emp;
--游标:指向缓冲区数据行的一个指针(句柄)。
--指针就是存放地址的一个变量。
--用法:
1、声明(declare部分):
cursor 游标名 is
select语句块(标明了游标所指向的数据区域);
2、打开(begin end执行体中)
open 游标名;
(只有在打开游标时,select语句才真正执行,
并把首行地址放入游标)
3、提取游标所指向的数据行(循环)
fetch 游标名 into 指定变量(自行处理)

4、关闭游标
close 游标名;

注意:
1、如果想再次使用被关闭的游标,可以重新开发游标。
2、游标是单向的。如果想重新访问开头的数据,只能
关闭后重新打开使用。
3、重要属性: %found %notfound(没有找到数据)
4、fetch同时完成两件事:
1)移向下一行
2)提取数据
--例子

declare
v_emp emp%rowtype;
cursor cur_emps is
select * from emp;
begin
open cur_emps;
loop
fetch cur_emps into v_emp;
exit when cur_emps%notfound;
dbms_output.put(v_emp.empno||' ');
dbms_output.put(v_emp.ename||' ');
dbms_output.put_line(v_emp.deptno);
end loop;
close cur_emps;
end;

--游标类型的变量
declare
cursor cur_emps is
select empno,ename,sal,deptno from emp;
v_emp cur_emps%rowtype;
begin
open cur_emps;
loop
fetch cur_emps into v_emp;
exit when cur_emps%notfound;
dbms_output.put(v_emp.empno||' ');
dbms_output.put(v_emp.ename||' ');
dbms_output.put_line(v_emp.deptno);
end loop;
close cur_emps;
end;

--参数
declare
cursor cur_emps(dept_no integer) is
select empno,ename,sal,deptno from emp
where deptno=dept_no;
v_emp cur_emps%rowtype;
begin
open cur_emps(20);
loop
fetch cur_emps into v_emp;
exit when cur_emps%notfound;
dbms_output.put(v_emp.empno||' ');
dbms_output.put(v_emp.ename||' ');
dbms_output.put_line(v_emp.deptno);
end loop;
close cur_emps;

open cur_emps(30);
loop
fetch cur_emps into v_emp;
exit when cur_emps%notfound;
dbms_output.put(v_emp.empno||' ');
dbms_output.put(v_emp.ename||' ');
dbms_output.put_line(v_emp.deptno);
end loop;
close cur_emps;
end;



标签:end,cur,游标,笔记,emps,Oracle,output,emp
From: https://blog.51cto.com/yuzhyn/5860713

相关文章

  • Oracle自增序列
     SQLServer中数据库可以自增字段,但是Oracle中没有这个选项,实际应用中我们可以使用序列(Sequence)实现想要的功能。创建Sequence语法如下:CREATE......
  • Oracle创建用户和授权
    在OracleXE中创建scott用户1、打开SQL*Plus,以sys用户登录数据库connect/assysdba2、依次执行下面命令--DROPUSERscottCASCADE;CRE......
  • 在Oracle中CHAR,NCHAR,VARCHAR,VARCHAR2,NVARCHAR2这五种类型的区别
    【在Oracle中CHAR,NCHAR,VARCHAR,VARCHAR2,NVARCHAR2这五种类型的区别】1.CHAR(size)和VARCHAR(size)的区别   CHAR为定长的字段,最大长度为2K字节......
  • Oracle-1 / Oracle及PlsqlDeveloper的设置
    1、启动监听器与服务器我的电脑->管理->服务...保证“...listener...”和“...service...”两个服务开启2、客户端软件设置tools->preference->connection->Or......
  • Oracle内置角色connect与resource的权限
    首先用一个命令赋予user用户connect角色和resource角色: grantconnect,resourcetouser; 运行成功后用户包括的权限: CONNECT角色:--是授予最......
  • Oracle 自带建表例子 scott.sql 文件
    RemCopyright(c)1990byOracleCorporationRemNAMEREMUTLSAMPL.SQLRemFUNCTIONRemNOTESRemMODIFIEDRemgdudey06/28/95-Modifiedfordesktopseed......
  • Oracle date 插入显示公元前日期
    显示公元前日期很简单:--先创建一个表createtabletest(ddate);--插入一条记录--插入的日期要注意--1、“-”(负号)表示公元前--2、“s”格式控制符insertinto......
  • Oracle存储过程及函数的练习题
    --存储过程、函数练习题--(1)创建一个存储过程,以员工号为参数,输出该员工的工资createorreplaceprocedurep_sxt1(v_empnoinemp.empno%type,v_saloutemp.sal%type)isb......
  • Oracle常用数据字典表
      Oracle常用数据字典表   查看当前用户的缺省表空间SQL>selectusername,default_tablespacefromuser_users; 查看当前用户的......
  • Oracle 12C卸载图文教程
    第一步:找到自己的Oracle安装目录。我的目录是:D:\app\u01\product\12.1.0\dbhome_1\deinstall,第二步:1、然后点击bat文件。出现如下等待画面。2、耐心等待一段时间,出现如下画......