用动态SQL吧。declare
  p_strsql varchar2(4000);
  vc_bh varchar2(100);
  vc_bm varchar2(100);
begin
  vc_bm := 表名;
  p_strsql := 'select bh into :x from ' || vc_bm ;
  execute immediate p_strsql into vc_bh;
end;这样应该可以了。

解决方案 »

  1.   

    非常感谢,成功了!但如果SELECT 出的是个结果集怎么办?动态定义游标,怎么动态定义游标?
      

  2.   


     这样的问题太多了, 简单说一句:使用ref cursor 可以完成.
      

  3.   

    Examples:create or replace package types
    as  type rc is ref cursor; 
    end; create or replace procedure FetchCount(iLowVal   in number,
                                           iHighVal  in number,
                                           TableName in varchar2,
                                           sColumn   in varchar2,
                                           sOtherCon in varchar2,
                                           p_cursor in out types.rc)
    IS
    BEGIN
      
      open p_cursor for  ' Select  count(*) from ' || TableName || ' where ' ||
                   sColumn || ' >= :iLowVal ' || ' and ' || sColumn ||
                   ' <= :iHighVal ' || Nvl(sOtherCon,'')  using iLowVal, iHighVal;  EXCEPTION WHEN OTHERS THEN
       NULL;
    End;
    /
      

  4.   

    以下是详细的例子:
      TYPE crTmp IS REF CURSOR;
      crM  crTmp;             
      cSQL:=cTableName;
      cSQL:='SELECT * FROM  '||cSQL;
      OPEN crM FOR cSQL;
      LOOP
       --Process;
      END LOOP