如何在 Oracle SQL Developer 中生成带子查询的 INSERT 语句?
How to generate INSERT Statements with Subqueries in Oracle SQL Developer?
我需要将一些数据从环境 A 移动到环境 B。到目前为止,非常简单。但是某些列具有 FK 约束,不幸的是,查找数据已经在环境 B 上并且具有不同的 PK。幸运的是,我可以在其他独特的列上进行映射。因此我想知道 SQL Developer 是否有导出功能,允许我用子查询替换某些列值。为了清楚起见,我正在寻找一个 SQL 开发人员功能、查询或类似的功能,它生成如下所示的 INSERT 语句:
INSERT INTO table_name(col1, col2, fkcol)
VALUES('value', 'value', (SELECT id FROM lookup_table WHERE unique_value = 'unique'))
我最好的方法是尝试手动生成它们,如下所示:
SELECT
'INSERT INTO table_name(col1, col2, fkcol) '
|| 'VALUES( '
|| (SELECT LISTAGG(col1, col2,
'SELECT id FROM lookup_table
WHERE unique_value = ''' || lookup_table.uniquevalue || '''', ', ')
WITHIN GROUP(ORDER BY col1)
FROM table_name INNER JOIN lookup_table ON table_name.fkcol = lookup_table.id)
|| ' );'
FROM table_name;
这绝对是一种痛苦。您是否知道在不接近其他数据库的情况下更好地实现此目标的方法?
简单编写一个 查询,使用两个表的 join 生成所需数据(使用映射键)。
例如(参见下面的示例数据)这样的查询(将 unique_value
映射到 id
):
select
tab.col1, tab.col2, lookup_table.id fkcol
from tab
join lookup_table
on tab.fkcol = lookup_table.unique_value
COL1 COL2 FKCOL
---------- ------ ----------
1 value1 11
2 value2 12
现在您可以使用正常的 SQL INSERT 格式的开发人员导出功能,这将生成以下脚本 - 如果您想将它传输到其他数据库或 直接插入它 与 INSERT ... SELECT
.
Insert into TABLE_NAME (COL1,COL2,FKCOL) values ('1','value1','11');
Insert into TABLE_NAME (COL1,COL2,FKCOL) values ('2','value2','12');
示例数据
select * from tab;
COL1 COL2 FKCOL
---------- ------ -------
1 value1 unique
2 value2 unique2
select * from lookup_table
ID UNIQUE_
---------- -------
11 unique
12 unique2
我需要将一些数据从环境 A 移动到环境 B。到目前为止,非常简单。但是某些列具有 FK 约束,不幸的是,查找数据已经在环境 B 上并且具有不同的 PK。幸运的是,我可以在其他独特的列上进行映射。因此我想知道 SQL Developer 是否有导出功能,允许我用子查询替换某些列值。为了清楚起见,我正在寻找一个 SQL 开发人员功能、查询或类似的功能,它生成如下所示的 INSERT 语句:
INSERT INTO table_name(col1, col2, fkcol)
VALUES('value', 'value', (SELECT id FROM lookup_table WHERE unique_value = 'unique'))
我最好的方法是尝试手动生成它们,如下所示:
SELECT
'INSERT INTO table_name(col1, col2, fkcol) '
|| 'VALUES( '
|| (SELECT LISTAGG(col1, col2,
'SELECT id FROM lookup_table
WHERE unique_value = ''' || lookup_table.uniquevalue || '''', ', ')
WITHIN GROUP(ORDER BY col1)
FROM table_name INNER JOIN lookup_table ON table_name.fkcol = lookup_table.id)
|| ' );'
FROM table_name;
这绝对是一种痛苦。您是否知道在不接近其他数据库的情况下更好地实现此目标的方法?
简单编写一个 查询,使用两个表的 join 生成所需数据(使用映射键)。
例如(参见下面的示例数据)这样的查询(将 unique_value
映射到 id
):
select
tab.col1, tab.col2, lookup_table.id fkcol
from tab
join lookup_table
on tab.fkcol = lookup_table.unique_value
COL1 COL2 FKCOL
---------- ------ ----------
1 value1 11
2 value2 12
现在您可以使用正常的 SQL INSERT 格式的开发人员导出功能,这将生成以下脚本 - 如果您想将它传输到其他数据库或 直接插入它 与 INSERT ... SELECT
.
Insert into TABLE_NAME (COL1,COL2,FKCOL) values ('1','value1','11');
Insert into TABLE_NAME (COL1,COL2,FKCOL) values ('2','value2','12');
示例数据
select * from tab;
COL1 COL2 FKCOL
---------- ------ -------
1 value1 unique
2 value2 unique2
select * from lookup_table
ID UNIQUE_
---------- -------
11 unique
12 unique2