我在存储过程中写了如下的动态SQL,想用变量v_count取得动态表的记录数:v_sql:='select count(*) into '||v_count||' from '||trim(v_tablename);
V_CURSOR:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(V_CURSOR,V_SQL,DBMS_SQL.NATIVE);
V_ERR:= DBMS_SQL.EXECUTE(V_CURSOR);
DBMS_SQL.CLOSE_CURSOR(V_CURSOR);但返回如下错误:ORA-00936: missing expression请问是什么原因?该如何处理?谢谢!

解决方案 »

  1.   

    v_sql:='select count(*) into ''||v_count||'' from '||trim(v_tablename)||'';
      

  2.   

    CREATE OR REPLACE PROCEDURE copy ( 
         source      IN VARCHAR2, 
         destination IN VARCHAR2) IS 
         id_var             NUMBER; 
         name_var           VARCHAR2(30); 
         birthdate_var      DATE; 
         source_cursor      INTEGER; 
         destination_cursor INTEGER; 
         ignore             INTEGER; 
      BEGIN 
     
      -- Prepare a cursor to select from the source table: 
         source_cursor := dbms_sql.open_cursor; 
         DBMS_SQL.PARSE(source_cursor, 
             'SELECT id, name, birthdate FROM ' || source, 
              DBMS_SQL.native); 
         DBMS_SQL.DEFINE_COLUMN(source_cursor, 1, id_var); 
         DBMS_SQL.DEFINE_COLUMN(source_cursor, 2, name_var, 30); 
         DBMS_SQL.DEFINE_COLUMN(source_cursor, 3, birthdate_var); 
         ignore := DBMS_SQL.EXECUTE(source_cursor); 
         DBMS_SQL.CLOSE_CURSOR(source_cursor);
         dbms_output.put_line(id_var);
         dbms_output.put_line(name_var);
         dbms_output.put_line(birthdate_var);
    end;
    /
      

  3.   

    可以用 
    execute immediate v_sql into v_count;