PL/SQL 游标 (实验七)

PL/SQL 游标

emp、dept 目标表结构及数据

要求

  • 基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息;
    显示格式:
    部 门 号: XXX
    部门名称: XXX
    所在位置: XXX
  • 基于部门表建立游标dept_cursor2,使用标量变量接收游标数据,输出部门表信息;
    显示格式:部门号:XXX 部门名称:XXX 所在位置:XXX
  • 基于雇员表建立游标emp_cursor,根据用户输入的部门号,输出该部门薪水在5000元上的雇员姓名、薪水.
    显示格式:雇员姓名:XXX 薪水:XXX

1.基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息;
显示格式:
部 门 号: XXX
部门名称: XXX
所在位置: XXX

declare
  cursor dept_cursor1 is
  select dno,dname,loc from dept;

  dept_record dept%rowtype;

begin
  open dept_cursor1;
  loop
       fetch dept_cursor1 into dept_record;

       exit when dept_cursor1%notfound or dept_cursor1%rowcount > 3;
       dbms_output.put_line('部门号:'||dept_record.dno);
       dbms_output.put_line('部门名称:'||dept_record.dname);
       dbms_output.put_line('所在位置:'||dept_record.loc);

  end loop;
  close dept_cursor1;
end;
       

2.基于部门表建立游标dept_cursor2,使用标量变量接收游标数据,输出部门表信息;
显示格式:部门号:XXX 部门名称:XXX 所在位置:XXX

declare
  cursor dept_cursor2 is
  select dno,dname,loc from dept;
  v_deptno dept.dno%type;
  v_deptname dept.dname%type;
  v_deptloc dept.loc%type;

begin
  open dept_cursor2;
  loop
       fetch dept_cursor2 into v_deptno,v_deptname,v_deptloc;

       exit when dept_cursor2%notfound or dept_cursor2%rowcount > 3;
       dbms_output.put_line('部门号:'||v_deptno||',部门名称:'||v_deptname||',所在地:'||v_deptloc);

  end loop;
  close dept_cursor2;
end;
       

3.基于雇员表建立游标emp_cursor,根据用户输入的部门号,输出该部门薪水在5000元上的雇员姓名、薪水.
显示格式:雇员姓名:XXX 薪水:XXX

declare
  cursor emp_cursor is
  select ename,sal from  emp where dno = &dno;
  v_ename emp.ename%type;
  v_sal emp.sal%type;

begin  

 open emp_cursor;
    loop
       fetch emp_cursor into v_ename,v_sal;
       exit when emp_cursor%notfound;
       if v_sal > 5000
       then
         dbms_output.put_line('雇员姓名:'||v_ename||',薪水:'||v_sal);
       end if;
   end loop;
  close emp_cursor;

end;
  
时间: 2024-10-13 06:19:19

PL/SQL 游标 (实验七)的相关文章

PL/SQL游标

PL/SQL游标:A:分类:1:隐式游标:非用户明确声明而产生的游标. 你根本看不到cursor这个关键字.2:显示游标:用户明确通过cursor关键字来声明的游标. B:什么是隐式游标:1:什么时候产生:会在执行任何合法的SQL语句(DML---INSERT UPDATE DELETE DQL-----SELECT)中产生.他不一定存放数据.也有可能存放记录集所影响的行数.如果执行SELECT语句,这个时候游标会存放数据.如果执行INSERT UPDATE DELETE会存放记录影响的行数.C

Oracle数据库PL SQL游标

PL SQL游标 将hregright表中不存在hrno的记录,用house表中的hrno填充(house唯一的时候) declare cursor house_cur is select h.regno,h.hrno from house h where h.hrno is not null group by h.regno,h.hrno having count(h.regno)=1; begin for house in house_cur loop update hregright r

PL/SQL 游标的使用详解

一:通过游标,PL/SQL 指向语句被分析以后的活动集 二:对于不同的SQL语句,游标的使用情况不同:1:非查询语句--隐式的2:结果是单行的查询语句--隐式的或显式的3:结果是多行的查询语句--显式的 三:游标属性1:%FOUND 2:%NOTFOUND 3:%ISOPEN 4:%ROWCOUNT 三:显式游标的用法四个步骤(1)定义一个游标名,以及与其相对应的SELECT 语句.语法:CURSOR cursor_name IS select_statement (2)打开游标.语法:OPEN

6 关于 Oracle NULL栏位和PL./SQL执行实验

今日有针对NULL值有了相关实验. 对NULL 值插入的讨论. 1, PL/SQL 中可以执行插入''或者NULL 的操作, 前提是栏位允许为空. 2, 可以对NULL进行一系列数据库运算. 如: SELECT ROUND(TO_NUMBER(MAX(A.IN_STATION_TIME)-SYSDATE))*24 FROM SFISM4.R_WIP_TRACKING_T A WHERE A.IN_STATION_TIME IS NULL 总结: 相应TO_NUMBER(NULL)也是可行, MA

PL/SQL 游标的使用

 游标的使用 ①游标概念 为了处理SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息, 当中包含要处理的行的数目.一个指向语句被分析以后的表示形式的指针以及查询的活动集(active set). 游标是一个指向上下文的句柄( handle)或指针. 通过游标,PL/SQL能够控制上下文区和处理语句时上下文区会发生些什么事情 ②显式游标处理 1.显式游标处理需四个PL/SQL步骤: 定义游标:就是定义一个游标名,以及与其相相应的SELECT

Oracle数据库之PL/SQL游标

1. 游标概念 字面意思是游动的光标,是指向上下文区域的句柄或指针. 在PL/SQL块中执行CRUD操作时,ORACLE会在内存中为其分配上下文区.用数据库语言来描述游标就是:映射在上下文区结果集中一行数据上的位置实体. 用户可以使用游标访问结果集中的任意一行数据,将游标指向某行后,即可对该行数据进行操作.游标为应用提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法,是设计嵌入式SQL语句的应用程序的常用编程方式. 在每个用户会话中,可以同时打开多个游标,其最大数量由数据库初

PL/SQL 游标详解

刚打开游标的时候,是位于一个空行,要用fetch into 才能到第一行.只是要注意用更新游标的时候,不能在游标期间commit. 否则会报ORA-01002: fetch out of sequence就是COMMIT导致的错误.在打开有for update的cursor时,系统会给取出的数据加上排他锁(exclusive), 这样在这个锁释放前其他用户不能对这些记录作update.delete和加锁.而我一旦执行了commit,锁就释放了,游标也变成无效的,再去fetch数据时就出现错误了.

PL/SQL游标使用

游标只是一个指向查询语句返回的结果的指针,因此在游标定义时将包含一个查询定义.当游标打开后,数据被接收到一块内存区域存储,直到游标关闭. 游标实际上指向的是一块内存区域,这块内存区域位于进程全局区内部,称为上下文区域,在上下文区域中包含如下3类信息 1.查询返回的数据行 2.查询所处理的数据的行号 3.指向共享池中的已分析的SQL语句 游标实际上指向一块内存区域 游标定义时并不会获取游标数据,只有在游标被打开后,游标相关的查询语句被执行,然后将检索到的结果保存到内存中. 游标结构示意图 游标指向

ORACLE PL/SQL练习(七)

PL/SQL变量的作用域,在当前块内部有效. declare v_num number(5,2) := 1.23; begin declare v_num char(10); begin v_num := 12345; dbms_output.put_line(v_num); end; dbms_output.put_line(v_num); end; SQL> declare 2   v_num number(5,2) := 1.23; 3  begin 4     declare v_num