试图从我的模式中删除所有没有行的表?
Posted
技术标签:
【中文标题】试图从我的模式中删除所有没有行的表?【英文标题】:Trying to drop all tables from my schema with no rows? 【发布时间】:2010-05-08 06:48:55 【问题描述】:我正在尝试删除架构中没有行的所有表,但是当我执行此代码时 我收到一个错误
THis is the code:
create or replace procedure tester
IS
v_count NUMBER;
CURSOR emp_cur
IS
select table_name from user_tables;
BEGIN
FOR emp_rec_cur IN emp_cur LOOP
EXECUTE IMMEDIATE 'select count(*) from '|| emp_rec_cur.table_name INTO v_count ;
IF v_count =0 THEN
EXECUTE IMMEDIATE 'DROP TABLE '|| emp_rec_cur.table_name;
END IF;
END LOOP;
END tester;
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-00554: error encountered while parsing access parameters
KUP-01005: syntax error: found "identifier": expecting one of: "badfile, byteordermark, characterset, data, delimited, discardfile, exit, fields,
fixed, load, logfile, nodiscardfile, nobadfile, nologfile, date_cache, processing, readsize, string, skip, variable"
KUP-01008: the bad identifier was: DELIMETED
KUP-01007: at line 1 column 9
ORA-06512: at "SYS.ORACLE_LOADER", line 14
ORA-06512: at line 1
ORA-06512: at "SCOTT.TESTER", line 9
ORA-06512: at line 1
【问题讨论】:
为了使这段代码更防弹,我建议你用双引号括住表名 - 例如'DROP TABLE "' || emp_rec_cur.table_name || '"'; 【参考方案1】:ORACLE_LOADER 正在引发错误。我怀疑您的循环正在查找一个外部表,该表的定义存在问题 - KUP-01008 抱怨关键字“DELIMETED”,但外部表语法包含关键字“DELIMITED”。
如果您不打算删除外部表,也许您需要从查询中省略它们,例如:
CURSOR emp_cur IS
SELECT table_name FROM user_tables
MINUS
SELECT table_name FROM user_external_tables;
【讨论】:
以上是关于试图从我的模式中删除所有没有行的表?的主要内容,如果未能解决你的问题,请参考以下文章