2013-07-21 44 views
-1

该过程现在插入数据后,我插入了一个例外,但新问题是它是在emp1表中插入同一行两次。插入使用dblink过程不起作用

CREATE OR REPLACE PROCEDURE proc1 IS 
     CURSOR b IS SELECT environment FROM emp; 
     v VARCHAR2(11); 
BEGIN 
     OPEN c; 
     LOOP 
      FETCH b INTO v; 
      CASE v 
       WHEN 'a' THEN INSERT INTO [email protected] SELECT empno, name FROM emp 
       WHEN 'b' THEN INSERT INTO [email protected] SELECT empno, name FROM emp 
      END CASE; 
     END LOOP; 
EXCEPTION 
     WHEN case_not_found THEN dbms_output.put_line('No data'); 
CLOSE b; 
+0

如果你执行这个过程显示错误?你是否试图在程序之外运行insert命令?你有没有检查表** emp1 **是否有权限插入? –

+0

您是否收到错误? – OldProgrammer

+0

是的,它显示一个错误ORA-06592:执行CASE语句时未找到CASE – user1815823

回答

1

如果您研究了错误消息,则应该确定该错误与您的dblink无关。这里是相关的信息:

ORA-06592: 
CASE not found while executing CASE statement 
Cause: A CASE statement must either list all possible cases or have an else clause. 
Action: Add all missing cases or an else clause 

所以,你有一个“环境”既不是'a'也不是'b'的值。如果其他值有效,那么您需要为它们添加案例,或者添加ELSE子句以使用某些默认操作来捕获这些值。

case v 
     when 'a' then insert into [email protected] select empno, name from emp 
     when 'b' then insert into [email protected] select empno, name from emp 
     else <<do something here>> 
    end loop; 
+0

感谢两次),我这样做之前和编辑的职位。现在它插入相同的行两次 – user1815823

+0

那么,你在EMP中有多行,环境值相同。你打印出你的游标的值,看看结果是什么,或者只是将光标选择为查询? – OldProgrammer

+0

由于我正在测试我只有环境行,但仍然在目标表中插入两次 – user1815823