Oracle PL / SQL:FETCH游标无法获取EOF !!为什么?

时间:2013-09-12 17:30:42

标签: oracle plsql

这是我的脚本pl。实际上,没有遵守“线搜索”线EOF条件。因此,主键中发生了违规行为。

有人可以帮忙吗? 谢谢。

IF TRIM(v_descricao_uo_municipio) = 'Belo Horizonte - Registro de Imóveis' THEN -- id = 2430

  /* Abre o cursor das UO's para inserção */
  OPEN cr_cartorio_uo(v_id_uo_municipio);    
  loop
    Line to fetch: FETCH cr_cartorio_uo INTO v_id_uo, v_descricao_uo; -- Problem is here

    /* Faz carga em "grupodeenviouo" */
    INSERT INTO grupodeenviouo (grupodeenvio_id, uo_id) 
       VALUES (v_returning_grupo_id, v_id_uo);

    EXIT WHEN cr_cartorio_uo%NOTFOUND;
  END LOOP cr_cartorio_uo;

END IF;

1 个答案:

答案 0 :(得分:2)

发生主键冲突只是因为光标中的最后一行被提取两次。而且这种情况发生的原因是错误的EXIT WHEN cr_cartorio_uo%NOTFOUND声明 - 它应该在FETCH cr_cartorio_uo INTO声明之后发布:

if trin(v_descricao_uo_municipio) = 'Belo Horizonte - Registro de Imóveis' 
then 
 /* Abre o cursor das UO's para inserção */
  open cr_cartorio_uo(v_id_uo_municipio);    
  loop
    fetch cr_cartorio_uo 
     into v_id_uo, v_descricao_uo; -- Problem is here

    exit when cr_cartorio_uo%notfound;

    /* Faz carga em "grupodeenviouo" */
    insert into grupodeenviouo (grupodeenvio_id, uo_id) 
      values (v_returning_grupo_id, v_id_uo);
  end loop cr_cartorio_uo;
end if;