我的数据库托管在我只能发出DML statements的服务器上。
是否有一个SQL命令(对于Oracle)我可以使用CSV文件中的条目填充表格? CSV文件和表的列是相同的,但是如果有一个版本的命令,我可以决定文件中的哪个字段进入哪一列,那就更好了。
另外,除了Oracle SQL Developer之外,我无法安装任何东西,因此我需要的是一个可以从那里运行的SQL代码。我相信SQL * Loader和外部表在这种情况下无济于事。
答案 0 :(得分:1)
使用oracle外部表
create directory ext_data_files as 'C:\'; -- create oracle directory object point to the directory where your file resides, using this we will fetch the csv data
create table teachers_ext (
first_name varchar2(15),
last_name varchar2(15),
phone_number varchar2(12)
)
organization external (
type oracle_loader
default directory ext_data_files
access parameters (fields terminated by ',' )
location ('teacher.csv')
)
reject limit unlimited
/
你的csv就像
约翰史密斯,8737493
Foo,Bar,829823832
答案 1 :(得分:0)
直接从Oracle 9i documentation复制:
CREATE TYPE student_type AS object ( student_no CHAR(5), name CHAR(20)) / CREATE TABLE roster ( student student_type, grade CHAR(2));
还假设有一个外部表定义如下:
CREATE TABLE roster_data ( student_no CHAR(5), name CHAR(20), grade CHAR(2)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY ',') LOCATION ('foo.dat'));
要从roster_data加载表名单,您需要指定一些内容 类似于以下内容:
INSERT INTO roster (student, grade) (SELECT student_type(student_no, name), grade FROM roster_data);
外部表访问驱动程序(又名ORACLE_LOADER
)接受一堆选项来处理许多不同的情况:固定宽度,CSV,字节顺序(二进制数据),分隔符......一次再次,请参阅the doc了解详细信息。
...如果有一个命令的版本,我可以决定文件中的哪个字段进入哪个列甚至更好。
正如您现在所理解的那样,外部表的处理方式与其他表一样。因此,您可以像往常一样在INSERT ... SELECT ...
声明中重新订购和/或执行计算。