【发布时间】:2018-05-21 00:37:34
【问题描述】:
我是 oracle 数据库的新手,我正在制作一个非常简单的双语词典(2 个表 - 英语和法语)。
字典通常包含数千个单词。我的问题是,与其编写数千个 [INSERT INTO ... VALUES] 命令,还有没有更好的方法来以某种方式自动化该过程,例如制作导入表单?因为我学校提供的书只提到了 INSERT 命令。
【问题讨论】:
标签: sql oracle performance
我是 oracle 数据库的新手,我正在制作一个非常简单的双语词典(2 个表 - 英语和法语)。
字典通常包含数千个单词。我的问题是,与其编写数千个 [INSERT INTO ... VALUES] 命令,还有没有更好的方法来以某种方式自动化该过程,例如制作导入表单?因为我学校提供的书只提到了 INSERT 命令。
【问题讨论】:
标签: sql oracle performance
您可以结合使用电子表格和 INSERT ALL 命令来快速生成 SQL INSERT 命令来插入数据。
如果您有电子表格格式的数据,则可以使用公式为每一行构造一个 INSERT 语句。
但是,您可以使用 INSERT ALL 语法而不是 INSERT(单行)语法。
为此:
"INTO table (col1, col2, col3) VALUES ('val1', 'val2', 'val3')"。您需要使用串联将值添加到此公式中。所以您的公式可能如下所示(假设 A、B 和 C 列):
="INTO 表 (col1, col2, col3) VALUES ('"&A2&"', '"&B2&"', '"&C2&"')"
INSERT ALL
SELECT * FROM dual;
您的命令将如下所示:
INSERT ALL
INTO table (col1, col2, col3) VALUES ('val1', 'val2', 'val3')
INTO table (col1, col2, col3) VALUES ('val1a', 'val2a', 'val3a')
INTO table (col1, col2, col3) VALUES ('val1b', 'val2b', 'val3b')
SELECT * FROM dual;
这将在单个语句中插入所有记录,并且可能比数百或数千个 INSERT 语句快得多。
或者,您可以使用数据泵导入和导出之类的工具,但我在这方面的经验有限,所以也许其他用户可以详细说明。
【讨论】:
如果您将数据保存在文件中,则可以使用 UTL_FILE 包来读取、解析和加载数据。 Oracle ULT_FILE package
您也可以使用 Oracle 的外部表功能。看这里 Oracle External tables
【讨论】:
Oracle 的 Sql Loader 产品非常适合快速加载大量数据。
【讨论】: