2013-07-21 43 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