补充:如果不是动态SQL语句则不会出错。如:
select count(*) into iCnt from t1;

解决方案 »

  1.   

    d_sql := 'select count(*) from t1 where ...';
    EXECUTE IMMEDIATE d_sql into iCnt;
      

  2.   

    d_sql := 'select count(*) from t1 where ...';
    execute immediate d_sql into iCnt;
      

  3.   

    这种动态语句只能执行一些dml及一些ddl语句,select into是不可以的。
    如果你想使用,你需使用dbms_sql包了,机械出版的那一本pl/sql书讲得很详细。
      

  4.   

    d_sql := 'select count(*) from t1 where ...';
    EXECUTE IMMEDIATE d_sql into iCnt;
      

  5.   

    不是这样的,看以下吧SQL> set serveroutput on
    SQL> declare
      2  iCnt NUMBER;
      3  d_sql varchar2(50);
      4  
      5  begin
      6  d_sql := 'select count(*) from newsindex';
      7  EXECUTE IMMEDIATE d_sql into icnt;
      8  dbms_output.put_line(icnt);
      9  end;
     10  /
    16PL/SQL procedure successfully completed
      

  6.   

    也可以这样:SQL> declare
      2  iCnt NUMBER;
      3  d_sql varchar2(50);
      4  type t_sor is ref cursor;
      5  v_sor t_sor;
      6  begin
      7  d_sql := 'select count(*) from newsindex';
      8  open v_sor for d_sql;
      9  fetch v_sor into icnt;
     10  dbms_output.put_line(icnt);
     11  close v_sor;
     12  end;
     13  /
    16PL/SQL procedure successfully completed