我看看你的功能,这样就可以了,为什么要写成动态语句。
create or replace procedure p_1
is
i_count number;
 begin
  select count(*) into i_count from table_a ;
 end p_1;

解决方案 »

  1.   

    sqlstr:='select count(*) into i_count from table_a ';
    在动态语句中i_count变量这样引用是否有错?
      

  2.   

    动态sql中好像不能用into吧FUNCTION GET_DSQL_NUMBER(SQLSTR IN VARCHAR2) RETURN NUMBER IS
      N_CID       INTEGER;
      N_RET       INTEGER;
      N_NR        NUMBER;
    BEGIN
      N_CID := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(N_CID, SQL_STR, DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(N_CID, 1, N_NR);
      N_RET := DBMS_SQL.EXECUTE(N_CID);
      IF DBMS_SQL.FETCH_ROWS (N_CID) >0 THEN
         DBMS_SQL.COLUMN_VALUE(N_CID,1,N_NR);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(N_CID);
      RETURN N_NR;
    EXCEPTION
         WHEN OTHERS THEN
         DBMS_SQL.CLOSE_CURSOR(N_CID);
         RETURN NULL;
    END;