我需要在模式中创建多个具有完全相同DDL的表。为此,我通常使用以下命令:
CREATE TABLE SCHEMA.XYZ_STORE_TABLE AS SCHEMA.EFG_STORE_TABLE
这部分很简单。现在我必须对1000个表重复同样的过程。为了使我的工作更简单,我创建了一个表,它将存储所有应该创建的表名,其结构如下所示:
CREATE TABLE SCHEMA.ABC_PROCESS(
PROCESS_CD VARCHAR(32),
PROCESS_NAME VARCHAR(100),
PROCESS_STORE_TABLE_NAME VARCHAR(100)
)
然后,我可以查询SELECT PROCESS_STORE_TABLE_NAME FROM SCHEMA.ABC_PROCESS
并获取要创建的表名。
| PROCESS_STORE_TABLE_NAME |
| ------------------------ |
| ABC_STORE_TABLE |
| HIJ_STORE_TABLE |
现在,我可以编写一个Java代码,它将获取这些表名,将其存储在ArrayList中,然后从Java代码中对该ArrayList的每个元素执行CREATE TABLE
脚本。
有没有一种更简单的方法可以不用编写Java代码而使用SQL本身来完成它呢?(附言,您可以假设来自查询的表名还不存在)
2条答案
按热度按时间vbkedwbf1#
可以在复合语句中使用动态sql。
fiddle
oewdyzsn2#
是的,有这样一个办法:
这将为您在
ABC_PROCESS
中找到的每个表名生成一个CREATE
命令。