<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    游標

    Posted on 2009-02-16 19:29 啥都寫點 閱讀(200) 評論(0)  編輯  收藏 所屬分類: DB

    --demo1(游標基本使用方法)

    declare

     v_emp emp%rowtype;

     --申明游標

     cursor c_emp is

         select * from emp;       

    begin

     --打開游標

     if not c_emp%isopen then

        open c_emp;

     end if;

     --遍歷游標

     loop

        fetch c_emp into v_emp;

    --將下面這條exit語句放在end loop之上會使最后一條數據出現兩次

        exit when c_emp%notfound; 

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

     --關閉游標

     close c_emp;

    end;

    --游標屬性

    -- 顯式游標屬性 cursor_name%found cursor_name%notfound 

    --              cursor_name%isopen cursor_name%rowcount

    -- 隱式游標屬性 sql%found sql%notfound sql%rowcount

    --demo2(變量綁定)

    declare

     v_deptno emp.deptno%type;

     v_emp emp%rowtype;

     --變量綁定/申明游標

     cursor c_emp is

         select * from emp where deptno = v_deptno;       

    begin

     v_deptno := 10;

     --v_deptno := &deptno;

     --打開游標

     if not c_emp%isopen then              

        open c_emp;

     end if;

     --遍歷游標

     loop

        fetch c_emp into v_emp;

        exit when c_emp%notfound;

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

     --關閉游標

     close c_emp;

    end;

    --demo3(參數化游標)

    declare

     v_emp emp%rowtype;

     --變量綁定/申明游標

     cursor c_emp(p_deptno emp.deptno%type) is

         select * from emp where deptno = p_deptno;       

    begin

      --打開游標

     if not c_emp%isopen then

        open c_emp(10);

      end if;

     --遍歷游標

     loop

        fetch c_emp into v_emp;

        exit when c_emp%notfound;

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

     --關閉游標

     close c_emp;

    end;

    --游標檢索循環

    --demo1(loop)

    declare

     v_emp emp%rowtype;

     --申明游標

     cursor c_emp is

         select * from emp where deptno = 20;       

    begin

     --打開游標

     if not c_emp%isopen then

        open c_emp;

     end if;

     --遍歷游標

     loop

        fetch c_emp into v_emp;

        exit when c_emp%notfound;

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

     --關閉游標

     close c_emp;

    end;

    --demo2(while)

    declare

     v_emp emp%rowtype;

     --申明游標

     cursor c_emp is

         select * from emp where deptno = 20;       

    begin

     --打開游標

     if not c_emp%isopen then

        open c_emp;

     end if;

     --遍歷游標

     while c_emp%found loop

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

        fetch c_emp into v_emp;

     end loop;

     --關閉游標

     close c_emp;

    end;

    --demo3-1(for)

    declare

     --申明游標

     cursor c_emp is

         select * from emp where deptno = 20;       

    begin

     --遍歷游標

     for v_emp in c_emp loop

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

    end;

    --demo3-2(for)

    begin

     --遍歷游標

     for v_emp in (select *

                    from emp

                    where deptno = 20) loop

        dbms_output.put_line('no: ' || v_emp.empno);

        dbms_output.put_line('name: ' || v_emp.ename);

        dbms_output.put_line('job: ' || v_emp.job);

        dbms_output.put_line('sal: ' || v_emp.sal);

        dbms_output.put_line('*****************************');

     end loop;

    end;

    --游標嵌套

    declare

     v_deptinfo dept%rowtype;

     v_empinfo emp%rowtype;

     type c_dept is ref cursor;

     v_dept c_dept;

     type c_emp is ref cursor;

     v_emp c_emp;

    begin

     open v_dept for

           select * from dept;

          

     loop

        fetch v_dept into v_deptinfo;

        exit when v_dept%notfound;

        dbms_output.put_line('deptno: ' || v_deptinfo.deptno

                               || 'deptname: ' || v_deptinfo.dname);

        open v_emp for

           select * from emp where deptno = v_deptinfo.deptno;

        loop

          fetch v_emp into v_empinfo;

          exit when v_emp%notfound;

          dbms_output.put_line('empno: ' || v_empinfo.empno

                               || 'ename: ' || v_empinfo.ename);

        end loop;

        close v_emp;

     end loop;

     close v_dept;

    end;

    --select for update游標

    --demo

    declare

     v_emp emp%rowtype;

     cursor c_emp is

        select * from emp

        for update of sal,comm;

    /* cursor c_emp is

        select * from emp

        for update;*/

    begin

     if not c_emp%isopen then

        open c_emp;

     end if;

     loop

        fetch c_emp into v_emp;

        exit when c_emp%notfound;

        update emp set sal = sal - 1000

        where current of c_emp;

     end loop;

     commit;

     close c_emp;

    end;

    --動態SQL

    --demo

    create or replace procedure proc_execsql

    is

     sql_str varchar2(1000);

    begin

     sql_str := 'create table bak_emp as select * from emp';

     execute immediate sql_str;

    end;

    begin

     proc_execsql;

    end;

    grant create any table to scott;

    --demo

    create or replace procedure proc_execsql

    is

     sql_str varchar2(1000);

    begin

     for v_table in (select table_name from user_tables) loop

        sql_str := 'create table bak_'||v_table.table_name

                       || ' as select * from ' || v_table.table_name;

        execute immediate sql_str;

     end loop;

    end;

    begin

     proc_execsql;

    end;

    --demo

    create or replace procedure proc_createproc

    (p_table varchar2)

    is

     p_sql_str varchar2(1000) := '';

     tl_sql_str varchar2(1000) := '';

     iv_sql_str varchar2(1000) := '';

     sql_str varchar2(1000) := '';

    begin

     for v_table in ( select COLUMN_NAME

                       from user_tab_columns

                       where TABLE_NAME = p_table) loop

        p_sql_str := p_sql_str || 'p_' || v_table.COLUMN_NAME ||' '

                       || p_table ||'.' || v_table.COLUMN_NAME

                       || '%type,';

        tl_sql_str := tl_sql_str || v_table.COLUMN_NAME ||',';

        iv_sql_str := iv_sql_str || 'p_'||v_table.COLUMN_NAME || ',';

     end loop;

     p_sql_str := substr(p_sql_str,1,length(p_sql_str)-1);

     tl_sql_str := substr(tl_sql_str,1,length(tl_sql_str)-1);

     iv_sql_str := substr(iv_sql_str,1,length(iv_sql_str)-1);

     sql_str := 'create or replace procedure proc_i_' || p_table

                   || '(' || p_sql_str || ')'

                   || 'is '

                   || 'begin '

                   || ' insert into ' || p_table || '(' || tl_sql_str || ')'

                   || ' values(' || iv_sql_str || '); '

                   || 'end;';

           

     dbms_output.put_line(sql_str);

     execute immediate sql_str;

    end;

    grant create any procedure to scott;



                                                                                                           --    學海無涯
            


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 一个人看的www在线观看免费| 国产精品99久久免费观看| 亚洲人成电影网站免费| 亚洲综合小说久久另类区| 57pao一国产成视频永久免费| 亚洲欧洲免费视频| 最近免费中文字幕大全免费| 91天堂素人精品系列全集亚洲| 色欲色香天天天综合网站免费| 亚洲高清国产拍精品26U| 日韩免费观看一区| 亚洲春黄在线观看| 免费无码AV片在线观看软件| 亚洲人成网站在线在线观看| 日美韩电影免费看| av网站免费线看| 久久亚洲国产精品| 成人女人A级毛片免费软件| 中文字幕 亚洲 有码 在线| 免费精品一区二区三区在线观看| jzzijzzij在线观看亚洲熟妇| 亚洲国产精品无码久久久久久曰| 三上悠亚在线观看免费| 亚洲一区二区中文| 在线免费不卡视频| 国产精品成人69XXX免费视频| 久久久久亚洲Av片无码v| 性做久久久久久久免费看| 羞羞漫画小舞被黄漫免费| 久久九九亚洲精品| 在线视频观看免费视频18| 曰批全过程免费视频免费看| 亚洲高清国产拍精品26U| 久久精品女人天堂AV免费观看| 男女超爽视频免费播放| 亚洲av永久无码精品漫画| 精品熟女少妇AV免费观看| 国产日韩在线视频免费播放| 亚洲明星合成图综合区在线| 一本久到久久亚洲综合| 69视频免费观看l|