我正在使用官方的 Oracle 23 Docker 镜像。我有大量的测试数据需要运行到数据库中,以便开发人员可以使用该图像。
我知道我可以将 .sql 脚本放入/docker-entrypoint-initdb.d/startup
图像上,它们将通过 SQL Plus 自动在图像上运行。
问题是,我不想看到:
db_1 | 1 row created.
db_1 |
db_1 |
db_1 | 1 row created.
db_1 |
db_1 |
db_1 | 1 row created.
db_1 |
db_1 |
db_1 | 1 row created.
db_1 |
db_1 |
db_1 | 1 row created.
db_1 |
db_1 |
db_1 | 1 row created.
db_1 |
db_1 |
(etc...)
db_1 | Commit complete.
在我的控制台输出中。我宁愿只看到类似的东西:
db_1 | 10,000 rows created.
db_1 |
db_1 |
db_1 | Commit complete.
或者甚至以 100 个为一组进行批量处理,也会大大减少产量。
这可能吗?
我尝试过使用INSERT ALL...
,但这仍然单独打印每个插入。
如果可能的话,最终的脚本应该向后兼容 19c。
选项 1:多次插入(您当前的解决方案)
如果你这样做:
然后你会得到每一行的语句:
选项 2:使用多行插入
INSERT ... SELECT
如果你这样做:
然后你会得到每个表的语句:
选项 3:使用多行插入
INSERT ALL
如果你这样做:
然后你会得到所有表的单个语句:
选项 4:将插入包装到 PL/SQL 块中
您还可以将所有
INSERT
语句包装在 PL/SQL 匿名块中:然后你会得到整个块成功(或失败)的单个语句:
所有这些语句应该与大多数(所有?)Oracle 版本兼容。
Oracle 11g 小提琴