如何使用Union ALL生成数据并在Oracle中插入ALL?
问题:
您想知道Union ALL和Insert ALL之间的区别,以生成少量数据。
解:
最近,我一直在生成少量数据以测试某些功能,并且遇到了Oracle中的两个选项。全部合并和全部插入是Oracle中通常用于生成少量数据的两个选项。
Oracle中最常见的集合运算符是UNION和UNION ALL。这些运算符用于合并数据集,即使这些数据集之间没有关系。
UNION创建一个不同的集合,而UNION ALL允许重复。删除重复项可能会对性能产生巨大影响,因此,理想情况下,默认情况下使用UNION ALL,稍后再处理重复项是理想的选择。
UNION ALL的最常见用法是生成数据。在Oracle中,我们必须始终从某些内容中进行选择,因此有一个名为DUAL的特殊伪表。
DUAL表只有一行,因此,如果要创建多行,则必须将语句与UNION ALL合并,如下所示
示例
SELECT 'something' FROM DUAL UNION ALLSELECT 'something_else' FROM DUAL UNION ALL
SELECT 'something_more' FROM DUAL UNION ALL
我已使用UNION ALL如下所示生成数据并将其插入到我的目标表中
示例
-- CREATE a tableCREATE TABLE tennis_stats
( tennis_player VARCHAR2(100),
grandslam_titles NUMBER(2) );
COMMIT;
示例
-- Generating data using Union AllINSERT INTO tennis_stats
SELECT REGEXP_SUBSTR(t.tennis_stats, '[^,]+', 1, 1) tennis_player,
REGEXP_SUBSTR(t.tennis_stats, '[^,]+', 1, 2) grandslam_titles
FROM (
SELECT 'ROGER FEDERER' || ',' || 20 AS tennis_stats FROM DUAL
UNION ALL
SELECT 'RAFAEL NADAL' || ',' || 19 AS tennis_stats FROM DUAL
UNION ALL
SELECT 'NOVAK DJOKOVIC' || ',' || 17 AS tennis_stats FROM DUAL ) t ;
COMMIT;
全部插入
Oracle SQL具有多表插入操作,使我们可以在一条语句中将数据插入到多个表中。当我们有一个填充多个目标的源时,多表插入很有用。
INSERT ALL语法旨在将数据添加到多个表中,但是我通常用于生成数据并将多个行插入到同一表中。
例如,假设我们要使用Insert All Option加载上面显示的相同数据。
示例
-- CREATE a tableCREATE TABLE tennis_stats
( tennis_player VARCHAR2(100),
grandslam_titles NUMBER(2) );
COMMIT;
示例
-- Generating data using Insert AllINSERT ALL
INTO tennis_stats VALUES ( 'ROGER FEDERER', 20)
INTO tennis_stats VALUES ( 'RAFAEL NADAL', 19)
INTO tennis_stats VALUES ( 'NOVAK DJOKOVIC', 17)
SELECT * FROM dual;
COMMIT;
注意INSERT ALL不使用序列。INSERT ALL仅对每个语句增加一次序列,而不对每个引用增加一次。
INSERT ALL语句有一个小问题–上面的代码未列出所有列名。在现实世界中的SQL语句中,我们不想浪费太多空间来重复相同的列列表。另外,排除列名将使查询更可靠。
如果将来的表格Tennis_stats版本添加了新列,则前面的语句将引发异常,而不是静默地写入错误数据。另一方面,列出列名称可确保值在正确的列中使用,即使列顺序发生变化也是如此。排除列名是值得商bat的样式选择。
结论
INSERT ALL看起来很整洁和容易,但是UNION ALL总体上对于生成数据更好。INSERT ALL语句比UNION ALL解析慢,尤其是对于具有数百行的大型语句。
如果我们的应用程序正在生成大量数据,则INSERT ALL优于多个INSERT语句。
总之,Insert ALL看起来很整洁,但实际上并不意味着要生成大量数据。
以上是 如何使用Union ALL生成数据并在Oracle中插入ALL? 的全部内容, 来源链接: utcz.com/z/321546.html