使用外部表时出现“表视图不存在”错误

Posted

技术标签:

【中文标题】使用外部表时出现“表视图不存在”错误【英文标题】:"table view does not exist" error while using external tables 【发布时间】:2015-02-25 08:09:03 【问题描述】:

我正在使用下面的代码使用外部表将数据插入主表,但我遇到了错误

declare
v_file varchar2(50):= 'abc.txt';
v_badfile varchar2(50) := 'test.bad';
v_logfile varchar2(50) :=  'test.log';
begin
execute immediate'create table ext_tab2 (
mprn number,
post_code varchar2(8),
house_no varchar2(8),
market_sector_flag varchar2(1),
ssc varchar2(3),
dcv  number )
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY IMPORT
    ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    LOAD WHEN
         (mprn  != BLANKS) AND
         (post_code != BLANKS) AND
         (house_no != BLANKS) 
    BADFILE IMPORT_PPM:'''||v_badfile||'''
    LOGFILE IMPORT_PPM:'''||v_logfile||''' 
    FIELDS TERMINATED BY '''||','||''' 
    )  
    LOCATION  ('''||v_file||''')
    )
REJECT LIMIT UNLIMITED';   

insert into table_1 select * from ext_tab2;
EXECUTE immediate' drop table ext_tab2';
end;

table1 与 ext_tab2 具有相同的列。 ext_tab2 出现错误 - 表不存在。 谁能帮我解决这个问题。

【问题讨论】:

外部表是否已创建?去掉drop语句,先检查是否创建。 @LalitKumarB - 它不会被创建,因为编译错误意味着整个块没有被执行;删除 drop 在这里不会显示任何区别,因为由于插入语句无效,它仍然无法编译。 @AlexPoole,这就是我要告诉 OP 的意思,但讽刺的是。 【参考方案1】:

您正在动态创建表,因此编译 PL/SQL 块时它还不存在。因为编译失败,所以无论如何都不会执行任何语句。

如果你必须动态创建表,你也必须动态引用它:

execute immediate 'insert into table_1 select * from ext_tab';

当然,您应该尽可能避免在运行时创建对象。

【讨论】:

【参考方案2】:

ext_tab2 仅在运行时创建,因此编译器不知道它。您也应该尝试将您的插入语句放在 Execute immediate 中。

【讨论】:

以上是关于使用外部表时出现“表视图不存在”错误的主要内容,如果未能解决你的问题,请参考以下文章

arcgis添加字段显示表或者视图不存在

oracle 赋予权限后,查询却显示表或视图不存在

从 cursor.tables() 列表中删除表时出现“表 'MSysAccessStorage' 不存在”错误

使用来自另一个模式的数据的 Oracle SQL 函数说表或视图不存在

使用 OleDB 列出所有存储过程和查询时出现不明确的外部连接错误

实体框架5与Oracle表/视图不存在不一致?