2012-03-08 60 views
0

我必須向表中添加許多註冊表,並且我需要幫助,因爲我開始使用PL/SQL對於PLSQL中的每一行檢查是否存在某個值,如果不存在,插入一條記錄

我有一個包含三列(ID,KEY,VALUE)的表格。 ID必須是唯一的,如果KEY沒有值叫'process_name',那麼必須創建一個新的註冊表,其值必須與ID相同。

例如,我可以在我的表

ID  KEY   VALUE 
A  cycles   4 
A  process_name  A 
A  number   2 
B  cycles   3 
B  number   2 
C  cycles   5 

所以有這個,我需要插入2條記錄到數據庫:

B  process_name  B 
C  process_name  C 

我應該如何開始創建腳本?

感謝

SOLUTION

INSERT INTO my_table 
    (SELECT distinct my_table.ID, 'process_name', my_table.ID 
     FROM my_table 
     WHERE my_table.ID NOT IN (SELECT distinct my_table.ID 
           FROM my_table 
           WHERE key = 'process_name')); 
+0

您使用的是哪個版本的Oracle? – Dan 2012-03-08 14:28:47

+0

我正在使用PL/SQL Developer 8.0.4.1514 – 2012-03-08 14:50:06

回答

0

假設distinct_id不能爲空,你可以使用:

INSERT INTO your_table 
    (SELECT distinct id, 'process_name', id 
     FROM your_table 
    WHERE distinct_id NOT IN (SELECT distinct_id 
           FROM your_table 
           WHERE key = 'process_name')); 

如果distinct_id是空的,使用NOT EXISTS來代替:

INSERT INTO your_table 
    (SELECT distinct id, 'process_name', id 
     FROM your_table t_out 
    WHERE NOT EXISTS (SELECT NULL 
         FROM your_table t_in 
         WHERE t_in.id = t_out.id 
          AND t_in.key = 'process_name')); 
+0

謝謝,我用最後的解決方案更新了這篇文章! – 2012-03-08 15:39:19

相關問題