oracle - "table view does not exist"使用外部表时出错

标签 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 错误 - 表不存在。 任何人都可以帮我解决这个问题吗?

最佳答案

您正在动态创建表,因此当编译 PL/SQL block 时它还不存在。由于编译失败,因此任何语句都不会被执行。

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

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

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

关于oracle - "table view does not exist"使用外部表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28714083/

相关文章:

arrays - 如何在 PL/SQL 中打印 ARRAY 的每个元素?

Oracle 11 PL/SQL : check variable for null, 空字符串且无结果

mysql - sql 请求在选择单个结果或多个结果时出现问题

sql - oracle LAST_DAY(sysdate)比较问题

database - 获取 "Insert or Update"触发器内的操作类型

oracle - 我是 PL/SQL 的新手。有人可以帮助我了解这个 PL/SQL 过程吗?

甲骨文顶点 : redirect to the page user requested after login

plsql - 在存储过程参数中使用引用游标与 sys_refcursor

oracle - 在 Oracle 中,唯一约束是否隐式包含索引?

sql - 从星期一到星期日按星期几排序