easwift_cai
2011-10-09 17:25
浏览 234

一个动态oracle游标的问题.求解答

问题我嵌入在代码里..
create produce......
declare  
    i   integer;
    type   myref   is   ref   cursor;
    my   myref;
    s   varchar2(40);

    rec varchar2(20);
begin
      s   :=   'select   stkcode   from   tr_gfk ';
    open   my   for   s;
      LOOP
       FETCH v_cursor    INTO rec;
        EXIT WHEN v_cursor%NOTFOUND;
        .......
    //问题在这里.这个rec 是返回的tr_gfk 表的stkcode字段 .

    1.那么我现在select * from tr_gfk .如何能返回表中所有的数据?定义一个什么样的类型?.怎么写.
    2.还有我现在的sql是动态sql.表名(tr_gfk)也许是传过来的参数.就是说要根据传过来的表名参数来定义这个 rec .怎么做? 
   

close   my;
end;

 

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • iteye_8576 2011-10-10 16:38
    已采纳

    [code="sql"]
    改下:
    DECLARE
    TYPE myref IS REF CURSOR;
    cur myref;
    s VARCHAR2(40);
    tb_name VARCHAR2(20);
    col_name VARCHAR2(20);
    TYPE arrays IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    rec arrays;
    BEGIN
    col_name := 'id'; -- 传递的列名

    tb_name := 'T'; -- 传递的表名
    s := 'select ' || col_name || ' stkcode from ' || tb_name;
    OPEN cur FOR s;
    FETCH cur BULK COLLECT
    INTO rec;
    FOR i IN rec.FIRST .. rec.LAST LOOP
    NULL;
    dbms_output.put_line(rec(i));
    END LOOP;
    CLOSE cur;
    END;
    [/code]

    已采纳该答案
    打赏 评论
  • iteye_8576 2011-10-10 16:36

    可以使用集合类型。下面代码你参考下:

    [code="sql"]
    DECLARE
    TYPE myref IS REF CURSOR;
    cur myref;
    s VARCHAR2(40);
    tb_name VARCHAR2(20);
    col_name VARCHAR2(20);
    TYPE arrays IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
    rec arrays;
    BEGIN
    -- 传递的列名
    col_name := 'id';
    -- 传递的表名
    tb_name := 'T';
    s := 'select ' || col_name || ' stkcode from T';
    OPEN cur FOR s;
    FETCH cur BULK COLLECT
    INTO rec;
    FOR i IN rec.FIRST .. rec.LAST LOOP
    NULL;
    dbms_output.put_line(rec(i));
    END LOOP;
    CLOSE cur;
    END;
    [/code]

    打赏 评论

相关推荐 更多相似问题