PLSQL Language Referenc-PL/SQL静态SQL-使用光标FOR循环处理查询结果集

使用光标FOR循环处理查询结果集

光标FOR循环允许你运行一个SELECT语句,然后立即循环结果集中的所有行。光标FOR循环可以使用隐式光标和显式光标。

如果只在光标FOR循环中使用SELEEC语句,则可以在光标FOR循环的内部指定SELECT语句,这种形式的光标FOR循环使用隐式光标,被称为隐式光标FOR循环语句。因为隐式光标对于语句来讲是内部的,所以不能使用命名SQL来引用它。

 

如果在相同的PL/SQL块中多次使用SELECT语句,则需要为它定义显式光标并在光标FOR循环语句中指定该光标。这种形式的光标FOR循环称为显式光标FOR循环语句。

光标FOR循环语句隐式地声明了循环变量,为光标返回类型的%ROWTYPE记录类型的变量。该记录对于循环是内部的,并只在循环执行期间存在。当有没有行被获取的时候,光标FOR循环关闭光标。当循环中的语句将控制权转移到循环外部或PL/SQL产生异常时,光标也被关闭。

--隐式光标FOR循环

BEGIN

    FOR item IN (

        SELECT last_name, job_id

        FROM employees

        WHERE job_id LIKE '%CLERK%'

        AND manager_id > 120

        ORDER BY last_name)

    LOOP

        DBMS_OUTPUT.PUT_LINE('Name = ' || item.last_name || ', Job = ' || item.job_id);

    END LOOP;

END;

 

--显式光标FOR循环

DECLARE

    CURSOR c1 IS

        SELECT last_name, job_id FROM employees

        WHERE job_id LIKE '%CLERK%' AND manager_id > 120

        ORDER BY last_name;

BEGIN

    FOR item IN c1

    LOOP

        DBMS_OUTPUT.PUT_LINE('Name = ' || item.last_name || ', Job = ' || item.job_id);

    END LOOP;

END;

 

--给显式光标FOR循环传递参数,即带参光标

DECLARE

    CURSOR c1 (job VARCHAR2, max_wage NUMBER) IS

        SELECT * FROM employees

        WHERE job_id = job

        AND salary > max_wage;

BEGIN

    --打开带参光标

FOR person IN c1('ST_CLERK', 3000) LOOP

        DBMS_OUTPUT.PUT_LINE (

            'Name = ' || person.last_name || ', salary = ' ||

            person.salary || ', Job Id = ' || person.job_id);

    END LOOP;

END;

 

--隐式光标FOR循环引用计算的列(需要为计算的列指定别名)

BEGIN

    FOR item IN (SELECT first_name || ' ' || last_name AS full_name,

                salary * 10                    AS dream_salary

                FROM employees

                WHERE ROWNUM <= 5

                ORDER BY dream_salary DESC, last_name ASC) LOOP

        DBMS_OUTPUT.PUT_LINE(item.full_name || ' 期望的薪水 ' || item.dream_salary);

    END LOOP;

END;

注意:在光标FOR循环中的语句如果产生异常,则在异常处理代码运行之前光标已经关闭,因此显式光标的属性在异常处理中不可用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1122762/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17013648/viewspace-1122762/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值