2012-03-08 144 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

相关问题