循环遍历游标数据并插入记录(如果它不存在)

时间:2016-09-08 17:15:34

标签: sql database oracle

我有以下表格:

表1:

doc_id | item_id 
------ | ------
71     | 4  
------ | ------
75     | 8  
------ | ------
75     | 3  
------ | ------
75     | 2  
------ | ------
73     | 7  

表2:

id     |  parent_id | parameter_id
------ | -----------|-------------
 1     | 4          | 4
------ | -----------|-------------
 2     | 8          | 3
------ | -----------|-------------
 3     | 3          | 4
------ | -----------|------------
 4     | 2          | 6 
------ | -----------|------------
 5     | 7          | 4

我想按照以下步骤在表2中插入行:

  1. 从Table1中选择item_id,其中document_id = 75;

  2. 对于来自1的每个item_id,检查Table2中是否存在记录 table2的parent_id =表1的item_id和parameter_id = 4;

  3. 如果记录不存在,则输入数据       插入时应插入表2中的值                (max(id)+1,该特定记录的parent_id(关联Table1" item_id),4作为parameter_id)。

  4. 我该怎么做?有人能给我一些暗示吗?我想使用游标并循环遍历它并检查记录是否存在。然后相应地插入数据??

    DECLARE CURSOR C1
    IS
        SELECT * FROM table 1
        WHERE DOC_ID = 75;
    BEGIN
    FOR EACH_RECORD IN C1 LOOP
        // check for Table 2 for EACH_RECORD.CONFIG_ITEM_ID;
    END LOOP;   
    END;
    /
    

1 个答案:

答案 0 :(得分:1)

insert into table2
(
    id,
    parent_id,
    parameter_id

)(
    select 
        (select (max(id)) from table2) + rownum,
        item_id,
        4
    from 
        table1
    where
        table1.doc_id = 75 and
        not exists(select 1 from table2 where table1.item_id = table2.parent_id and table2.parameter_id = 4)
)

上面的插入查询是table2 max(id) +1, item_id table1parameter_id doc_id所在的table2插入table1.item_id = table2.parent_id存在git ls-remote --symref $ git ls-remote --symref ... ref: refs/heads/master HEAD ...

中的记录