alter table tyjh001_1 add 'DAY'||to_char(number1) float(126);
=>
execute immediate 'alter table tyjh001_1 add day'||to_char(number1)||' float(126)';

解决方案 »

  1.   

    alter table tyjh001_1 add 'DAY'||to_char(number1) float(126);
    改为以下:
    v_syntax := ‘alter table tyjh001_1 add DAY'|| to_char(number1) || ’  float(126)‘;
    EXECUTE IMMEDIATE v_syntax ;
      

  2.   

    这个语句需要改成动态执行:EXECUTE IMMEDIATE "..."
      

  3.   

    在存储过程中不能直接执行ddl以及dcl语句,需要使用execute immediate或者使用存储过程来调用。
      

  4.   

    典型的初级使用错误:
    呵呵.zealot_zk(风中追风) 的说法全面:
    在存储过程中不能直接执行ddl以及dcl语句,
    需要使用execute immediate或者使用存储过程来调用
      

  5.   

    declare
        i integer:=0;
        number1 integer:=39;
        strsQL varchar(2000);     
       begin
         for i in 33..200 loop
           strsQL := alter table tyjh001_1 add 'DAY'||to_char(number1) float(126);
           execute immediate strsQL;
           number1:=number1+1;
         end loop;
      end;--必须把这些SQL语句拼好SQL,然后执行它。
    --不需要commit,你试试drop table temp_a表时,用commit的吗,
    --因为drop,alter,create 都是ddl,在这里必须用execute immediate来执行