"表格视图不存在"使用外部表时出错

时间:2015-02-25 08:09:04

标签: oracle plsql

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

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 的错误 - 表不存在。 任何人都可以帮助我。

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

ext_tab2仅在运行时创建,因此编译器不了解它。您应该尝试将insert语句也置于Execute immediate中。