declare 
        cursor deltables is select table_name from user_tables;
        tname user_tables.table_name%type;
begin
     open deltables;
     loop
         fetch deltables into tname;
         exit when deltables%notfound;
       dbms_output.put_line(tname);
     execute immediate 'drop table :tempname' using tname;      end loop;
      close deltables;
end; dbms_output.put_line(tname);能输出tname的值
execute immediate 'drop table :tempname' using tname;
这句话执行的时候出现问题
是否:tempname 不能用来作为表名的参数?

解决方案 »

  1.   

    我分别改了一下动态的SQL语句
     execute immediate 'drop table' ||  tname;
    错误:
    ORA-00950: 无效 DROP 选项
    ORA-06512: 在 line 10execute immediate 'drop table' || :tname using  tname;
    错误:
    ORA-01008: 并非所有变量都已绑定把动态语句注释掉   dbms_output.put_line(tname);
    可以返回user-tables中所有的表名 好郁闷啊 高手请指教!!!
      

  2.   

    execute immediate '... :var' using var;格式的动态sql目的是绑定变量,采用的是类似值传递模式,一般只用于dml语句,而且只传递变量,不能传递数据库对象,连列名都不能传递,更何况ddl语句中的表名了,所以必须先构建ddl字符串,然后再执行删除
      

  3.   

    改为这样:nvarchar(1000) @strSql;
              @strSql='drop table' ||  tname;
              execute immediate @strSql;
      

  4.   

    execute immediate 'drop table '||tname||'';