实在是不懂,自己瞎弄得,请指教了?
declare
v_exec_sql varchar2;
BEGIN
v_exec_sql:='select 'select '||'col1,col2'||' from '||(select 'table_1'||substr(to_char(sysdate,'yyyymmdd'),3,7)||'0500' from dual) from dual';
EXECUTE IMMEDIATE v_exec_sql;
EXCEPTION 
WHEN OTHERS 
THEN 
ROLLBACK;
END
/
因为v_exec_sql是个语句,所以不知道怎么执行它?这样对不对的?

解决方案 »

  1.   

    EXECUTE   IMMEDIATE   只能针对insert,update语句,对于select语句直接用或者用游标
      

  2.   

    select   'select   ' ¦ ¦'col1,col2' ¦ ¦'   from   ' ¦ ¦(select   'table_1' ¦ ¦substr(to_char(sysdate,'yyyymmdd'),3,7) ¦ ¦'0500'   from   dual)   from   dual;
    这句在sqlplus下运行可以出来啊:
    SQL> select 'select '||'col1,col2'||' from '||(select 'table_1'||substr(to_char(sysdate,'yyyymmdd'),3,7)||'0500' from dual) from dual;'SELECT'||'COL1,COL2'||'FROM'|
    ---------------------------------------------
    select col1,col2 from table_10801280500应该怎么改呢?
    其实我的想法很简单,就是要求它能够执行:select col1,col2 from table_10801280500 这个语句,然后出结果!
      

  3.   

    只不过table_10801280500 表名是变化的,于是我就咋整都整不出来了!
      

  4.   


    SQL> declare
      2    col1 nvarchar2(20);
      3    col2 nvarchar2(20);
      4    v_exec_sql varchar2(1000);
      5  begin
      6    col1 := 'flda';
      7    col2 := 'fldb';
      8    v_exec_sql := 'select '||col1||','||col2||' from table_1'||substr(to_char(sysdate,'yyyymmdd'),3,7)||'0500';
      9    dbms_output.put_line(v_exec_sql);
     10    --execute immediate v_exec_sql
     11  end;
     12  /select flda,fldb from table_10801280500PL/SQL procedure successfully completedExecuted in 0 seconds
      

  5.   

    谢谢,hyrongg 
    编译通过了,我试试吧!^_^