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

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

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

    隨筆-314  評論-209  文章-0  trackbacks-0

    下面就是例子程序

     --明細表打印予處理  通用報表:
    procedure mx_print_common(pd_id in mx_pd_syn.pd_id%type,
                       p_pd_mxb_id IN mx_pd_mxb_syn.p_mxb_id%type,
                       p_dept_no IN sc_mxk.dept_code%type,
                       p1 sc_bz_syn.bz_code%type,
                       p2 sc_cjjc_syn.cjjc_code%type,
                       p3 sc_mxk.warehouse_num%type)
    is
      sql2 varchar2(500);             --存儲查詢語句
      sql3 varchar2(500);             --存儲查詢條件
      str1 sc_print_syn.a%type;   --存儲車間進程
      str2 sc_print_syn.b%type;   --存儲班組(工藝、工序)進程
      s_ip sc_print_syn.ip%type;
      type cursor_type is ref cursor;
      c1 cursor_type;
      type record_type is record(
            pbom_id sc_mxk.pbom_id%type
      );
      r_c1 record_type;
     /*

    注意上面紅色的兩行和藍色的兩行

    紅色的兩行定義一個游標

    藍色的兩行定義一個游標中將要返回的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)

    */
          
        cursor c2(p_pbom_id sc_mxk.pbom_id%type) is
            select a.dd_count,b.gx_name,c.bz_name,d.cjjc_name
             from sc_p_gx_syn a,sc_gx_syn b,sc_bz_syn c,sc_cjjc_syn d
              where pbom_id = p_pbom_id
              and a.gx_code=b.gx_code(+) and b.dept_code=p_dept_no
              and a.bz_code=c.bz_code(+)  and b.dept_code=p_dept_no
              and a.cjjc_code=d.cjjc_code(+)  and b.dept_code=p_dept_no;
       
        r_c2 c2%rowtype;
    BEGIN
          s_ip :=sys_context('USERENV','IP_ADDRESS');
          delete from sc_print_syn where ip=s_ip and p_id=pd_id;
          commit;
         --下面開始構(gòu)造查詢語句
          sql2:='select distinct a.pbom_id from sc_mxk a';
          sql3:=' where a.p_id=' || pd_id || ' and a.dept_code= ''' || p_dept_no || '''';
      
          if  p_pd_mxb_id >0 then
             sql2:=sql3 || ',mxk c ';
             sql3:=sql3 || ' and c.m_mxb_id= ' || p_pd_mxb_id || ' and a.mxb_id = c.mxb_id';
          end if;
         
          if p1 is not null then
             sql2:=sql2 || ',sc_p_gx_syn b';
             sql3:=sql3 || ' and a.pbom_id=b.pbom_id  and b.bz_code = ''' || p1 || '''';
          end if;
          if p2 is not null then
             sql2:=sql2 || ',sc_p_gx_syn b';
             sql3:=sql3 || ' and a.pbom_id=b.pbom_id  and b.cjjc_code = '''  || p2 || '''';
          end if;
          if p3 is not null then
             sql3:=sql3 || ' and a.warehouse_num = ''' || p3 || '''';
          end if;
          sql2:=sql2 || sql3;

    --打開動態(tài)游標,再往下就都一樣了
          open c1 for sql2;
            loop
                fetch c1 into r_c1;
                exit when c1%notfound;
                str1:='';
                str2:='';
                --打開工序表進行處理
                open c2(r_c1.pbom_id);
                loop              
                    fetch c2 into r_c2;
                    exit when c2%notfound; --沒有記錄退出
                    if r_c2.cjjc_name is not null then
                       str1 :=str1 || to_char(r_c2.cjjc_name);
                    end if;
                    if r_c2.bz_name is not null then
                       str2 := str2  || r_c2.bz_name  ||  to_char(r_c2.dd_count);
                    elsif r_c2.gx_name is not null then
                       str2 := str2  || to_char(r_c2.gx_name)  ||  to_char(r_c2.dd_count);
                    end if;
           
                    
                end loop;
                close c2;
                insert into sc_print_syn(a,b,ip,p_id,r_id)
                   values(str1,str2,s_ip,pd_id,r_c1.pbom_id);
                      COMMIT;
            end loop;
            close c1;
    END mx_print_common;

    當(dāng)然,實現(xiàn)的方法一定很多,甚至可以用隱式游標。但是隱式游標中用動態(tài)查詢語句也要費一些周折的。

       作者:Northsnow
    電子郵件:northsnow@163.com
    blog:http://blog.csdn.net/precipitant

    posted on 2008-05-27 09:17 xzc 閱讀(10542) 評論(3)  編輯  收藏 所屬分類: Oracle

    評論:
    # re: oracle動態(tài)游標的簡單實現(xiàn)方法 2008-05-27 09:18 | xzc
    ----定義
    type cursor_type is ref cursor;
    c1 cursor_type;
    ----使用
    --打開動態(tài)游標,再往下就都一樣了
    open c1 for sql2;
    loop
    fetch c1 into r_c1;
    exit when c1%notfound;   回復(fù)  更多評論
      
    # re: oracle動態(tài)游標的簡單實現(xiàn)方法 [未登錄] 2008-05-27 11:43 | xzc
    TYPE cursor_type IS REF CURSOR;
    c1 cursor_type;
    --
    OPEN c1 FOR lc_sql;
    LOOP
    FETCH c1
    INTO lc_source_column_pk_value, lc_source_column_npk_value;
    EXIT WHEN c1%NOTFOUND;
    null;
    END LOOP;
    <<ERROREND>>
    CLOSE c1;  回復(fù)  更多評論
      
    # re: oracle動態(tài)游標的簡單實現(xiàn)方法 [未登錄] 2008-05-30 19:32 | xzc
    DECLARE
    v_cursor NUMBER;
    v_stat NUMBER;
    v_row NUMBER;
    v_id NUMBER;
    v_no VARCHAR(100);
    v_date DATE;
    v_sql VARCHAR(200);
    s_id NUMBER;
    s_date DATE;
    BEGIN
    s_id := 3000;
    s_date := SYSDATE;
    v_sql := 'SELECT id,qan_no,sample_date FROM "tblno" WHERE id > :sid and sample_date < :sdate';
    v_cursor := dbms_sql.open_cursor; --打開游標;
    dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析動態(tài)SQL語句;
    dbms_sql.bind_variable(v_cursor, ':sid', s_id); --綁定輸入?yún)?shù);
    dbms_sql.bind_variable(v_cursor, ':sdate', s_date);

    dbms_sql.define_column(v_cursor, 1, v_id); --定義列
    dbms_sql.define_column(v_cursor, 2, v_no, 100);
    dbms_sql.define_column(v_cursor, 3, v_date);
    v_stat := dbms_sql.execute(v_cursor); --執(zhí)行動態(tài)SQL語句。
    LOOP
    EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在結(jié)果集中移動游標,如果未抵達末尾,返回1。
    dbms_sql.column_value(v_cursor, 1, v_id); --將當(dāng)前行的查詢結(jié)果寫入上面定義的列中。
    dbms_sql.column_value(v_cursor, 2, v_no);
    dbms_sql.column_value(v_cursor, 3, v_date);
    dbms_output.put_line(v_id || ';' || v_no || ';' || v_date);
    END LOOP;
    dbms_sql.close_cursor(v_cursor); --關(guān)閉游標。
    END;



      回復(fù)  更多評論
      
    主站蜘蛛池模板: 色播在线永久免费视频| 久久青草免费91观看| 免费h视频在线观看| 国产成人亚洲综合| 一级毛片视频免费观看| 亚洲国产综合久久天堂| 免费高清A级毛片在线播放| 国产免费人成在线视频| 四虎精品免费永久免费视频| 免费吃奶摸下激烈视频| 日本亚洲成高清一区二区三区 | 99精品国产免费久久久久久下载| 亚洲视频一区二区在线观看| 国产四虎免费精品视频| 亚洲va国产va天堂va久久| 久久免费福利视频| 亚洲天堂福利视频| 成人免费777777| 免费v片在线观看| 全部一级一级毛片免费看| 在线亚洲精品自拍| 无码成A毛片免费| 亚洲三级视频在线| 俄罗斯极品美女毛片免费播放| 国产免费久久精品99久久| 亚洲av网址在线观看| 成人免费大片免费观看网站| 久久综合久久综合亚洲| 亚洲Av无码乱码在线播放| 亚洲日韩一区精品射精| 亚洲第一区精品观看| 免费国产99久久久香蕉| 亚洲人成人网毛片在线播放| 亚洲AV成人潮喷综合网| 无码精品国产一区二区三区免费| 亚洲国语在线视频手机在线| 亚洲?V无码乱码国产精品| 久久精品毛片免费观看| 香港经典a毛片免费观看看| 久久精品国产亚洲AV麻豆王友容| 久久精品无码一区二区三区免费|