如题,谢谢了 :)
如果有资料的也可以发个,谢谢

解决方案 »

  1.   

    create OR REPLACE FUNCTION get_sql(p_table VARCHAR2) RETURN VARCHAR2 IS
    l_str VARCHAR2(1000);
    BEGIN
     l_str:='select ename from '||p_table;
     RETURN l_str;
    END;
    /CREATE OR REPLACE PROCEDURE proc_test(p_table VARCHAR2,p_out OUT Sys_Refcursor)  IS
    l_str VARCHAR2(1000);
    BEGIN
      l_str:=get_sql(p_table);
      dbms_output.put_line(l_str);
      OPEN p_out FOR l_str;
    END;
    /DECLARE
     l_c SYS_REFCURSOR;
     l_v VARCHAR2(100);
    BEGIN
     proc_test('scott.emp',l_c);
     LOOP
       FETCH l_c INTO l_v;
       dbms_output.put_line(l_v);
       EXIT WHEN l_c%NOTFOUND; 
     END LOOP;
     CLOSE l_c;
    END;
    /
    输出:
    select ename from scott.emp
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
    JAMES
    FORD
    MILLER
    MILLER
      

  2.   

    谢谢啊谢谢,谢谢楼上的哥哥。
    写了那么多给我,还测试了
    然后我看了下资料:
    http://blog.163.com/lwt352@126/blog/static/5294785820071020102831392/和您写的很像的,但是我想问下文章里的:
    TYPE ref_cursor IS REF CURSOR和您写的:
    Sys_Refcursor
    使用上没有什么区别把?我baidu了下:资料不多,csdn里某哥贴有人回了句:
    ‘一个系统定义好的指针光标类型   可以通过这个参数传递你定义的光标’如果可以的话,告诉我有什么不同吧,麻烦了
      

  3.   

    请问以下说的就是这种关系吧?是这样的吗?谢谢了在很多時候我们需要通过bind var來提高整个DB的performance,
    从oracle7.3才被支持,在9i以后又有新的变化,在9i以前要define一個type才可以。
    而在9i以后oracle引入了一个新的类型为sys_refcursor,这样就不需要我们重新定义。看下面的例子。