簡體   English   中英

如何在 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;

這絕對是一種痛苦。 您是否知道在不接近其他數據庫的情況下更好地實現這一目標?

簡單地編寫一個查詢,使用兩個表的連接來生成所需的數據(帶有映射的鍵)。

例如(參見下面的示例數據)這樣的查詢(將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

現在您可以使用 INSERT 格式的普通 SQL Developer 導出功能,這將產生以下腳本 - 如果您想將其傳輸到其他數據庫或直接使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM