在CURSOR FOR LOOP中使用游标属性

时间:2013-08-28 07:47:20

标签: oracle loops for-loop plsql cursor

我在Scott模式中运行以下内容:

SET serveroutput ON;

BEGIN
FOR c_Emp IN (SELECT * FROM emp)
LOOP
dbms_output.put_line('The record processed by the cursor ' || c_Emp%rowcount);
END LOOP;
end;

这给出了错误:

cursor属性可能不适用于非游标'C_EMP'

但是,如果使用显式游标完成此操作,则可以正常工作:

设置serveroutput;

DECLARE 
       emp_record emp%ROWTYPE; 
       count_variable NUMBER;
       CURSOR c IS 
SELECT * FROM emp;
BEGIN
OPEN c;
loop
fetch  c INTO emp_record;
exit WHEN c%notfound;
dbms_output.put_line ('The record count is   ' || c%rowcount);
END loop;
close c;
end;

只是想了解:是否在使用CURSOR FOR LOOP时,索引变量是不是游标属性,如果是这样,为什么呢?有人可以将这个放弃......

3 个答案:

答案 0 :(得分:1)

c_Emp不是游标,它是一条记录,包含SELECT语句中每列的字段

c_Emp类似于第二个示例中的emp_record

答案 1 :(得分:1)

即使使用FOR循环,也必须明确定义游标。 使用带有光标的FOR循环的示例使用如下所示:

declare
 cursor c1 is select a from table;
begin
 FOR b in c1
 loop
  <required logic>
 end loop;
end;

答案 2 :(得分:1)

要在for循环中获取索引,可以在隐式游标的select子句中添加 rownum 伪列。

$(document).ready(function () {
    //category switch
    $('.onoffswitch').change(function () {
        var cat_id = $(this).children(':hidden').val();
        if ($(this).children(':checked').length === 0)
        {
            var status = 0;

        }
        else
        {
            var status = 1;
        }

        $.ajax({
            type: 'GET',
            url: base_url + "category/update_cat_status",
            data: {status: status, cat_id: cat_id},
            success: function (response) {
                //console.log(response);

            }
        });

    });
});