一个动态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;

 

[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]

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

[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]