`
kb5706
  • 浏览: 41503 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

游标,动态,for循环

 
阅读更多

--小测:输出各部门员工的部门名称和工号、姓名,工资。
<wbr>要求:<br><wbr>各部门工资最高的放在前面<br><wbr>在“DALLAS”地方的部门名称后加上“*”。<br> ·三种实现方式<br> 1 通过显式<span style="color:black">游标</span><br> 2 通过<span style="color:black">FOR循环</span><br> 3 通过动态SQL方式</wbr></wbr></wbr>

<wbr></wbr>

<wbr>----------------------------------------显示<span style="color:black">游标</span></wbr>

declare
  type emp_dept is record(
    name  dept.dname%type,
    loc   dept.loc%type,
    empno emp.empno%type,
    ename emp.ename%type,
    sal   emp.sal%type);
  emp_table emp_dept;
  cursor cur_emp is
    select d.dname, d.loc, e.empno, e.ename, e.sal
      from emp e, dept d
     where d.deptno = e.deptno
     order by e.deptno, e.sal desc;
begin
  open cur_emp;
  fetch cur_emp
    into emp_table;
  loop
 
    if emp_table.loc = 'DALLAS' THEN
      dbms_output.put_line(emp_table.loc || '*' || '-->' || emp_table.name ||
                           '-->' || emp_table.empno || '-->' ||
                           emp_table.sal);
    else
      dbms_output.put_line(emp_table.loc || '-->' || emp_table.name ||
                           '-->' || emp_table.empno || '-->' ||
                           emp_table.sal);
    end if;
    fetch cur_emp
      into emp_table;
    exit when cur_emp%notfound;
  end loop;
  close cur_emp;
end;
    ----不用if else
    begin
       for x in (select(case when d.loc='DALLAS'
       then d.loc||'*' else d.loc
        end),d.dname,e.empno,e.ename,e.sal from emp e,dept d where d.deptno=e.deptno order by e.deptno,e.sal desc)
 loop
     dbms_output.put_line(x.loc||'-->'||x.dname||'-->'||x.empno||'-->'||x.sal);
 end loop;
 END;
 

-------------------------------for循环

begin
       for x in (select d.dname,d.loc,e.empno,e.ename,e.sal from emp e,dept d where d.deptno=e.deptno order by e.deptno,e.sal desc)
 loop
 if x.loc='DALLAS' then
        x.loc:=x.loc||'*';
  end if;
     dbms_output.put_line(x.loc||'-->'||x.dname||'-->'||x.empno||'-->'||x.sal);
 end loop;
 END;

<wbr style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left"><span style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left">-------------------------------动态sql</span><br><p style="margin-top:0px; margin-bottom:5px; padding-top:0px; padding-bottom:0px; border-top-width:0px; border-right-width:0px; border-bottom-width:0px; border-left-width:0px; border-style:initial; border-color:initial; list-style-type:none; list-style-position:initial; word-wrap:normal; word-break:normal; line-height:21px; color:rgb(70,70,70); font-family:simsun; font-size:14px; text-align:left"> <span style="color:black"><span style="font-family:simsun; font-size:14px; line-height:21px; text-align:left"><span style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left"></span></span></span></p> <pre name="code" class="sql"><span style="background-color: rgb(255, 255, 255);">declare cursor cur_emp is select d.dname, d.loc, e.empno, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno order by e.deptno, e.sal desc; type emp_table_type is table of cur_emp%rowtype index by binary_integer; emp_table emp_table_type; str_sql varchar2(1000); begin str_sql := 'select d.dname, d.loc, e.empno, e.ename, e.sal from emp e, dept d where d.deptno = e.deptno order by e.deptno, e.sal desc'; execute immediate str_sql bulk collect into emp_table; for i in 1 .. emp_table.count loop if emp_table(i).loc = 'DALLAS' THEN dbms_output.put_line(emp_table(i).loc || '*' || '--&gt;' || emp_table(i).dname || '--&gt;' || emp_table(i).empno || '--&gt;' || emp_table(i).sal); else dbms_output.put_line(emp_table(i).loc || '--&gt;' || emp_table(i).dname || '--&gt;' || emp_table(i).empno || '--&gt;' || emp_table(i).sal); end if; end loop; end;</span></pre> <span style="background-color:rgb(255,255,255)"><br><span style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left"></span><wbr style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left"><span style="color:rgb(70,70,70); font-family:simsun; font-size:14px; line-height:21px; text-align:left">----还可以用记录类型来做 如上</span></wbr></span><br></wbr>
分享到:
评论

相关推荐

    oracle 游标FOR循环.doc

    oracle 游标FOR循环

    oracle解决游标多维度循环查询效率过低方案

    多维度查询时通常需要建立多个游标循环,查询效率无法得到保障,现在通过游标和substr()函数相结合的方式提高查询效率

    Oracle显示游标的使用及游标for循环

    本篇文章给大家介绍oracle显示游标的使用及游标for循环,当查询返回单行记录时使用隐式游标,查询返回多行记录并逐行进行处理时使用显式游标,对本文感兴趣的朋友一起学习吧

    当时自己初学SQL时,对游标很难理解,现在编写了一个实例游标循环,到时写SQL循环时方便些

    declare cursor1 cursor for select *from bb --把查询数据给游标 fetch next from cursor1 into @id,@name -- 定义一个游标有两个变量 while @@fetch_status=0 --返回值成功的时候循环 以上是我个人的理解

    sql 游标的使用—游标FOR循环小例子

    游标for循环是在pl/sql块中使用游标最简单的方式,它简化了对游标的处理。当使用游标for循环时,oracle会隐含的打开游标,提取游标数据并关闭游标。

    Oracle 游标循环

    Oracle 在模块中经常会使用游标进行数据相关操作,循环使用颇多。。。

    使用游标更新数据库

    在使用游标更新数据库时,需要在声明游标的时候使用 FOR UPDATE 选项,以便在打开游标时锁定游标结果集与表中对应数据行的所有列和部分列。这样可以保证正在进行操作的数据不被另外的用户修改。 2. FOR UPDATE 选项...

    oracle 游标

    介绍oracle 中使用游标 游标在存储过程中的应用 (输入、输出参数) 例:通过输入部门号,查询某部门员工的姓名和工作。 (用输入参数和输出参数 LOOP循环)

    SQL工作笔记-达梦7存储过程中游标的使用(for循环 IF等)

    如下存储过程使用游标遍历所有数据: CREATE OR REPLACE PROCEDURE "CFFTEST"."SELECT_STUDENT"("id" IN INT) AS myId int; myName varchar(50); cursor myCursor is select id, name from cfftest.student; ...

    Oracle游标使用方法及语法大全

    在 PL/SQL 中,还可以使用 FOR 循环来遍历游标,例如: ```sql FOR r_emp IN c_emp LOOP DBMS_OUTPUT.PUT_LINE('Salary of Employee ' || r_emp.ename || ' is ' || r_emp.sal); END LOOP; ``` 这里使用 FOR 循环来...

    ORACLE动态执行语句 正则表达式 游标

    ORACLE中的正则表达式的使用 动态执行SQL语句 动态创建游标 游标的创建方式 ORACLE循环操作 for循环 loop循环 while循环 判断操作

    oracle 游标使用大全

    oracle 游标的所有用法 普通循环读取,for循环读取等等

    plsql基础(游标)

    相信讲述了游标以及它的一些应用实例,在while,if 和for循环下的代码编写。

    关于游标使用sql

    简单循环处理 DECLARE @id INT, @value VARCHAR(10); BEGIN -- 定义游标. DECLARE c_test_main CURSOR FAST_FORWARD FOR SELECT id, value FROM test_main; -- 打开游标. OPEN c_test_main; --...

    MySql游标的使用实例

    1.创建游标 代码如下:DECLARE calc_bonus CURSOR FOR SELECT id, salary, commission FROM employees; 2.打开游标 代码如下:OPEN calc_bonus; 3.使用游标 代码如下:FETCH calc_bonus INTO re_id, re_salary, re_comm...

    Oracle 游标的使用

    在PL/SQL中可以使用游标处理数据。通过使用游标可以大大提高PL/SQL程序对数据...本章将主要介绍如何使用显式游标进行多行数据的查询、游标FOR循环以及游标变量的使用,另外还将介绍游标属性以及嵌套游标的使用等内容。

    for游标,示例

    for 循环游的示例,新人可以看看,参照下,以为后面的工作积累更多的经验

Global site tag (gtag.js) - Google Analytics