首页 文章

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

提问于
浏览
1

这个问题在这里已有答案:

我有以下表格:

表格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上插入行:

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

  • 对于来自1的每个item_id,检查Table2中是否存在记录,其中Table2的parent_id =表1的item_id且parameter_id = 4;

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

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

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 回答

  • 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)
    )
    

    上面的插入查询是 table2table1 插入 max(id) +1, item_id ,而 parameter_iddoc_id ,其中 doc_id 是75,而 table2 中的记录不存在 table1.item_id = table2.parent_id

相关问题