请教各位老师这样一个问题: 
           我向写这样一个需求,就是每天要自动的从不同的表中查数据,放入另一个表中。例如:2008-08-01去b01表查数据,2008-08-02去b02表查数据。存储过程中就要将日期中的日和b组合最为表名,但是在存储过程中,就是查不出来,老报错。
            举一个例子:
        create or replace procedure c_procedure
         is
   v_date varchar2(25):='chen';
   v_a varchar2(100):='chen123';
   v_sql varchar2(100);
         begin
   dbms_output.put_line(v_a);
   v_sql:='select id into v_date from '||v_a||' where rownum<2';
   execute immediate v_sql;
end;
        这段代码就是执行不出来,由什么错吗?

解决方案 »

  1.   

    修改为:
    ...
    v_sql:='select id from '||v_a||' where rownum <2';
    execute immediate v_sql into v_date;
    ...
      

  2.   

    create or replace procedure c_procedure is
      v_date varchar2(25):='chen'; 
      v_a varchar2(100):='chen123'; 
      v_sql varchar2(100);
      mycursor INTEGER;  
      ignore INTEGER; 
    begin   
      v_sql:='select id into v_date from '||v_a||' where rownum <2'; 
      mycursor := dbms_sql.open_cursor; 
      dbms_sql.parse(mycursor,v_sql,1); 
      DBMS_SQL.DEFINE_COLUMN(mycursor,1,v_date ,25);  
      ignore := dbms_sql.execute(mycursor); 
      if DBMS_SQL.FETCH_ROWS(mycursor) <> 0 then 
      DBMS_SQL.COLUMN_VALUE(mycursor,1,v_date ); 
      end if; 
      dbms_sql.close_cursor(mycursor); end;
      

  3.   

    象1楼说的该一下就可以,或
    v_sql:='select id into v_date from '||v_a||' where rownum <2'; 
    该为 v_sql:='select id into :v_date from '||v_a||' where rownum <2'; 
    SQL> edit
    已写入 file afiedt.buf  1   create or replace procedure c_procedure
      2          is
      3    v_date varchar2(25):='SCOTT';
      4    v_a varchar2(100):='EMP';
      5    v_sql varchar2(100);
      6          begin
      7    dbms_output.put_line(v_a);
      8    v_sql:='select ename into :v_date from '||v_a||' where rownum <2';
      9  dbms_output.put_line(v_sql);
     10    execute immediate v_sql;
     11  dbms_output.put_line(v_date);
     12* end;
    SQL> /过程已创建。SQL> exec c_procedure
    EMP
    select ename into :v_date from EMP where rownum <2
    SCOTTPL/SQL 过程已成功完成。