• oracle cursor



    -------- begining of the structure of test --------
    /*
    userId    userName
    1    John1
    2    John2
    3    John3
    4    John4
    5    John5
    */

    ---------------- part 1 ----------------
    declare
        cursor v_cursor is select * from test;
        v_record test%rowtype;

    begin
        open v_cursor;
       
        fetch v_cursor into v_record;
        while v_cursor%FOUND LOOP
            dbms_output.put_line(v_record.userid || ',' ||v_record.username);
            fetch v_cursor into v_record;
        end loop;
       
        close v_cursor;
    end;

    -- result
    /*
    1,John1
    2,John2
    3,John3
    4,John4
    5,John5
    */

    ---------------- part 2 ----------------
    declare
        cursor v_cursor(userId number, userName varchar2) is select userid, userName from test where userId = 1;
        v_userId test.userid%type;
        v_userName test.username%type;
       
    begin
        -- 这里temp是随便输入的一个字串,
        -- 可能是由于上面游标是针对字段定义的.
        open v_cursor(1,'temp');
       
        loop
            fetch v_cursor into v_userId, v_userName;
            exit when v_cursor%NOTFOUND;
            dbms_output.put_line(v_userId || '-' || v_userName);              
        end loop;
       
        close v_cursor;
    end;

    ---------------- part 3 ----------------
    --由于不需要open cursor,因为最高效。
    declare
        cursor v_cursor(userName varchar2) is select userName from test where userId = 1; 
        
    begin  
        for v_temp_cursor in v_cursor('temp') loop
            dbms_output.put_line(v_temp_cursor.username);
        end loop;
    end;

    ---------------- ISOPEN ----------------
    declare
        cursor v_cursor(username varchar2) is select userName from test where userId = 1;
        v_userName test.username%type;
       
    begin
        if v_cursor%ISOPEN then
           dbms_output.put_line('cursor is opened');
        else
           open v_cursor('temp');
        end if;
       
        fetch v_cursor into v_userName;
        close v_cursor;
       
        dbms_output.put_line(v_userName);
    END;

    ---------------- ROWCOUNT ----------------
    declare   
        cursor v_cursor(username varchar2) is select userName from test where userId > 1;
        v_userName test.username%type;

    begin
        open v_cursor('temp');
       
        loop
            fetch v_cursor into v_userName;
            exit when v_cursor%NOTFOUND OR v_cursor%NOTFOUND IS null;
            dbms_output.put_line('record number is '||v_cursor%ROWCOUNT);
        end loop;
       
        close v_cursor;
    END;

    ---------------- 更新数据 ----------------
    declare
        cursor v_cursor is select username from test for update;
        v_userName test.username%type;

    begin
        open v_cursor;
       
        fetch v_cursor into v_userName;
        while v_cursor%FOUND Loop
            update test set username =  v_userName || userId where current of v_cursor;
            fetch v_cursor into v_userName;
        end loop;
       
        close v_cursor;
    end;

    ---------------- 隐式游标 ----------------
    begin
        for v_cursor in(select username from test) loop
            dbms_output.put_line(v_cursor.username);
        END LOOP;
    end;

  • 相关阅读:
    Java_File类
    Java_Math类和Random类
    Java_包装类
    Java_Stringbuilder和StringBuffer
    Java_String
    Java_数组, 懒得整理了 ---------------------> 未完, 待续
    Java_内部类
    Java_三大特征相关
    Java_垃圾回收机制(未掌握)
    重载(overload)和重写(override)的区别?
  • 原文地址:https://www.cnblogs.com/aspsmile/p/1278499.html
Copyright © 2020-2023  润新知