是否可以在 PLSQL/Oracle 中动态创建外部表
Posted
技术标签:
【中文标题】是否可以在 PLSQL/Oracle 中动态创建外部表【英文标题】:Is it possible to Dynamically Create External tables in PLSQL/Oracle 【发布时间】:2014-08-12 08:07:06 【问题描述】:我目前遇到了一些麻烦,我正在尝试从 CSV 文件中动态提取值并动态创建外部表,因为每个 CSV 文件每次都会有不同数量的标题。
有没有办法动态地做到这一点,我所做的研究告诉我你不能,但如果你可以的话,通过 oracle 线程将非常困难,而且我也没有任何运气来实现这个功能。
有没有人尝试过或者有经验可以提供一些帮助或建议?
我当前的脚本:
DROP TABLE TEST_CSV CASCADE CONSTRAINTS;
CREATE TABLE TEST_CSV
(
VAL1 VARCHAR2(255 BYTE),
VAL2 VARCHAR2(255 BYTE),
VAL3 VARCHAR2(255 BYTE)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY DATALOAD
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ","
)
LOCATION (DATALOAD:'test1.csv')
)
REJECT LIMIT UNLIMITED;
【问题讨论】:
【参考方案1】:您应该为此使用执行立即语句:
execute immediate 'DROP TABLE TEST_CSV CASCADE CONSTRAINTS';
等等…… 它与通常使用的命令没有任何区别。但是您可能会遇到一些权限问题。 Oracle 动态 sql 通常有一些错误,他的行为可能与普通 DDL 命令不同
【讨论】:
【参考方案2】:是的,可以,您可以为外部表创建一个动态语句,然后执行该语句的 EXECUTE IMMEDIATE。也可以查看我一直使用的代码 Line:1400 和 Line:1419
Code
【讨论】:
【参考方案3】:我建议你创建一个创建外部表的动态过程,这样你可以通过参数控制头部和目录。
注意,您应该在此动态过程中可能发生的所有情况之前考虑一下。
它有效,我以前做过。
任何问题都可以告诉我。
谢谢。
【讨论】:
以上是关于是否可以在 PLSQL/Oracle 中动态创建外部表的主要内容,如果未能解决你的问题,请参考以下文章
plsql oracle如何不允许员工的奖金大于总量的0.1%?