本帖最后由 yux007 于 2009-07-14 11:20:07 编辑

解决方案 »

  1.   

    必须要有个"对象"接收V_SQL返回的结果集
      

  2.   

    execute immediate v_sql into xxx;
    或者for cursor_ in v_sql loop ... end loop;
      

  3.   

    为什么这样还不行呢:
    declare
       l_cmd  varchar2(100) := 'select * from ';
       l_tblnam  varchar2(20) := 'aaa_test';
         v_sql varchar2(500);
         v_out varchar2(100);
    begin
         v_sql:= l_cmd || l_tblnam || ';';
         dbms_output.put_line(v_sql);
       execute immediate v_sql into v_out;
    end;
      

  4.   

    DECLARE
    l_cmd varchar2(100);
    l_tblnam varchar2(20);
    v_sql varchar2(500); 
    BEGIN
    l_cmd:='select * from '; 
    l_tblnam:='code_area'; 
    v_sql:=l_cmd||l_tblnam||';'; 
    dbms_output.put_line(v_sql);
    execute immediate V_SQL into xxx; 
    END;
    DECLARE 声明,在BEGIN里赋值
      

  5.   


    我这样改了一下:
    DECLARE
    l_cmd varchar2(100);
    l_tblnam varchar2(20);
    v_sql varchar2(500);
    v_out varchar2(100);
    BEGIN
    l_cmd:='select * from ';
    l_tblnam:='aaa_test';
    v_sql:=l_cmd||l_tblnam||';';
    dbms_output.put_line(v_sql);
    execute immediate V_SQL into v_out;
    END;
    执行报错:无效字符
      

  6.   

    麻烦给个可以直接运行的语句,初学oracle,见笑
      

  7.   

    如果是初学,那就先学习一下存储过程里怎么调用静态的sql
      

  8.   

    改好了
    DECLARE
    l_cmd varchar2(100);
    l_tblnam varchar2(20);
    v_sql varchar2(500);
    v_out varchar2(100);
    BEGIN
    l_cmd:='select * from ';
    l_tblnam:='aaa_test';
    v_sql:=l_cmd||l_tblnam;
    dbms_output.put_line(v_sql);
    execute immediate V_SQL into v_out;
    END;