我写了一个declare,想批量drop以TMP_开头的临时表。可惜执行的时候报错。
报错信息如下:
ORA-06550: 第 17 行, 第 48 列: 
PLS-00487: 对变量 'MYTAB' 的引用无效
ORA-06550: 第 17 行, 第 7 列: 
PL/SQL: Statement ignored
DECLARE
   CURSOR mycur
   IS
      SELECT table_name
        FROM user_tables
       WHERE table_name LIKE 'TMP_%';   mytab   user_tables.table_name%TYPE;
BEGIN
   OPEN mycur;   FETCH mycur
    INTO mytab;   WHILE mycur%FOUND
   LOOP
      EXECUTE IMMEDIATE 'drop table ' || mytab.TABLE_NAME;
   END LOOP;   CLOSE mycur;
END;
/

解决方案 »

  1.   

    mytab.TABLE_NAME 改为 mytab.
    我会这么写:
    open mycur;
    loop
      fetch mycur into mytab;
      exit when mycur%notfound;
      EXECUTE IMMEDIATE 'drop table ' || mytab; 
    end loop;
    close mycur;
      

  2.   

    另外,注意要有drop any table权限。。
      

  3.   

    如果是批量删除以tmp开头的表,我一般这么写。select 'drop table '||table_name||';' from user_tables where table_name like 'TMP_%';不过有一点需要再更新下的,你要的是drop掉TMP_开头的表,但是如果like后面跟的是TMP_,并不是代表TMP_,而是指TMP开头的后面跟任何字符,比如TMP1,TMP2都是,转义不熟,求其他大拿补充。