<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 啥都寫點 閱讀(201) 評論(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;



                                                                                                           --    學海無涯
            


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲春黄在线观看| 久久精品亚洲中文字幕无码麻豆| 精品亚洲国产成人| 免费看男女下面日出水来| 99久久精品国产亚洲| 99久久久国产精品免费牛牛| 亚洲国产成人久久精品影视| 无码av免费一区二区三区| 久久亚洲精品中文字幕| 亚洲精品视频在线免费| 亚洲熟妇无码一区二区三区| 美女黄网站人色视频免费国产| 国产精品亚洲精品久久精品 | 亚洲精品无码永久在线观看男男| 成视频年人黄网站免费视频| 亚洲天然素人无码专区| 国产亚洲精品免费| 国产精品福利片免费看| 亚洲AV无码一区二区二三区入口| 最近2019免费中文字幕6| 欧洲 亚洲 国产图片综合| 夜色阁亚洲一区二区三区| 免费av片在线观看网站| 亚洲码一区二区三区| 成人免费在线观看网站| 羞羞视频在线免费观看| 亚洲日产无码中文字幕| 在免费jizzjizz在线播| 亚洲aⅴ无码专区在线观看| 国产亚洲日韩一区二区三区| 91热久久免费精品99| 国产AV无码专区亚洲AV蜜芽| 亚洲熟妇无码另类久久久| 色影音免费色资源| 免费精品久久久久久中文字幕 | 久久国产精品2020免费m3u8| 亚洲一区二区无码偷拍| 亚洲女同成av人片在线观看| 成年网站免费视频A在线双飞| 暖暖免费中文在线日本| 亚洲天堂一区二区三区|