用动态SQL执行删除表的过程的问题?
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   不能用来作为表名的参数?     
------解决方案--------------------execute immediate  '... :var ' using var;格式的动态sql目的是绑定变量,采用的是类似值传递模式,一般只用于dml语句,而且只传递变量,不能传递数据库对象,连列名都不能传递,更何况ddl语句中的表名了,所以必须先构建ddl字符串,然后再执行删除
------解决方案--------------------改为这样:nvarchar(1000) @strSql; 
           @strSql= 'drop table ' ||  tname; 
           execute immediate @strSql;