如何使用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 ALL

SELECT 'something_else' FROM DUAL UNION ALL

SELECT 'something_more' FROM DUAL UNION ALL

我已使用UNION ALL如下所示生成数据并将其插入到我的目标表中

示例

-- CREATE a table

CREATE TABLE tennis_stats

( tennis_player    VARCHAR2(100),

  grandslam_titles NUMBER(2) );

COMMIT;

示例

-- Generating data using Union All

INSERT 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 table

CREATE TABLE tennis_stats

( tennis_player    VARCHAR2(100),

  grandslam_titles NUMBER(2) );

COMMIT;

示例

-- Generating data using Insert All

INSERT 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

回到顶部