create or replace procedure GetListByTableName (Ptablename varchar,p_Cursor out housegrade.h_cursor) is
begin
  open p_Cursor for select  distinct *  from Ptablename order by  OrderMark;
EXCEPTION
when others then
  rollback;
  return ;
end ;系统报表不存在的错误,请问该怎么写呢?

解决方案 »

  1.   

    动态SQL语句strSQL varchar;
    strSQL := 'select  distinct *  from '||Ptablename||' order by  OrderMark';
    open p_Cursor for strSQL;
      

  2.   

    谢谢,再问一个问题,我要执行这个过程怎么把游标参数传入?
    declare
     m_cursor housegrade.h_cursor;
    begin GetListByTableName 'AA' , m_cursor;end;
    我这样写老报错
      

  3.   

    SQL> VAR CC REFCURSOR;  ----定义游标
    SQL> EXECUTE TYPES.GETEMPS('tab_name',:CC); -- 传入表名和游标PL/SQL 过程已成功完成。SQL> PRINT CC;  --察看取得的游标的结果AREA_CODE
    ----------
    1
    1
    1
    1
    2
    2
    2
    2
    2已选择9行。
      

  4.   

    SQL> var mcur refcursor;
    REFCURSOR not supported为什么我这样写报错呢?
      

  5.   

    create or replace procedure GetListByTableName (Ptablename varchar,p_Cursor out housegrade.h_cursor) is楼主定义的游标是什么呢 ?
    p_Cursor out housegrade.h_cursor 
    不清楚是什么类型的,估计是自定义的
      

  6.   

    是啊,我自己在包里面定义的  h_cursor ref cursor;就这样定义的
      

  7.   

    --包头
    create or replace package types is
      type cursorType  is ref cursor;
       procedure getemps (p_tname varchar2 ,p_cursor out cursorType );
    end ;--包体
    create or replace package body types as
    procedure getemps (p_tname varchar2 ,p_cursor out cursorType )
    as 
    l_str varchar2(100);
      begin
        DBMS_OUTPUT.put_line('BEGIN PROCEDURE ');
        l_str := 'select * from '||p_tname ||' order by 1';
        open p_cursor for l_str;
      end getemps;
    end ;
      

  8.   

    declare
     m_cursor housegrade.h_cursor;
    begin
     GetListByTableName('AA' , m_cursor);
    end;