2012-11-14 75 views
0

我有問題,我在光標選擇。選擇在其他窗口中正常工作,但我用光標在程序中出錯了爲什麼? 我改變Tabele和數據庫的名稱,但選擇是OK這個過程之外錯誤與查詢選擇光標

我的錯誤: PL/SQL:ORA-04052: ORA-00604: ORA-03106:

CREATE OR REPLACE PROCEDURE ChangeDismissDate 
IS 
BEGIN 
    DECLARE 
      v_id VARCHAR2(40); 
      v_dateABC DATE; 
      v_dateDismiss DATE; 
     CURSOR cur IS 
       select emp.EMP_NO, abc.date, emp.DISMISS_DATE 
       from [email protected]_ABC abc, 
         employee_tab emp, 
         person_info_tab pin, 
         oracle_account oa 
       where bhd.emp_no = emp.EMP_NO 
       and pin.PERSON_ID = emp.EMP_NO 
       and oa.USERNAME = pin.USER_ID 
       and emp.EMP_NO in ( 
       select pi.PERSON_ID from tab_person pi 
       where fu.active = 'TRUE' 
       and fu.IDENTITY = pi.USER_ID) AND emp.EMP_NO like '%L%' 
       and nvl(abc.date,to_date('20491231','yyyymmdd')) <> nvl(emp.DISMISS_DATE,to_date('20491231','yyyymmdd')); 

     BEGIN 
         OPEN cur; 
          LOOP 
           FETCH cur INTO v_id,v_dateABC,v_dateDismiss; 

           DBMS_OUTPUT.PUT_LINE('v_id: ' || v_id); 
           DBMS_OUTPUT.PUT_LINE('v_dateABC: ' || v_dateABC); 
           DBMS_OUTPUT.PUT_LINE('v_dateDismiss: ' ||v_dateDismiss); 

          EXIT WHEN cur%NOTFOUND; 
          END LOOP; 
         CLOSE cur; 
     END; 

END; 
/
+0

你得到了什麼類型的錯誤? – user75ponic

+0

好吧,我編輯帖子,我寫了錯誤 – Przemek

+0

我想這是關於權限。檢查你通過dblink訪問的表是否有權限,當你執行你的plsql程序 – user75ponic

回答

0

你可以嘗試通過添加異常塊來獲得什麼錯誤

CREATE OR REPLACE PROCEDURE ChangeDismissDate 
IS 
BEGIN 
    DECLARE 
      v_id VARCHAR2(40); 
      v_dateABC DATE; 
      v_dateDismiss DATE; 
     CURSOR cur IS 
       select emp.EMP_NO, abc.date, emp.DISMISS_DATE 
       from [email protected]_ABC abc, 
         employee_tab emp, 
         person_info_tab pin, 
         oracle_account oa 
       where bhd.emp_no = emp.EMP_NO 
       and pin.PERSON_ID = emp.EMP_NO 
       and oa.USERNAME = pin.USER_ID 
       and emp.EMP_NO in ( 
       select pi.PERSON_ID from tab_person pi 
       where fu.active = 'TRUE' 
       and fu.IDENTITY = pi.USER_ID) 
       AND emp.EMP_NO like '%L%' 
       and nvl(abc.date,to_date('20491231','yyyymmdd')) <> 
       nvl(emp.DISMISS_DATE,to_date('20491231','yyyymmdd')); 

     BEGIN 
         OPEN cur; 
          LOOP 
        FETCH cur INTO v_id,v_dateABC,v_dateDismiss;  
        DBMS_OUTPUT.PUT_LINE('v_id: ' || v_id); 
        DBMS_OUTPUT.PUT_LINE('v_dateABC: ' || v_dateABC); 
        DBMS_OUTPUT.PUT_LINE('v_dateDismiss: ' ||v_dateDismiss); 

          EXIT WHEN cur%NOTFOUND; 
          END LOOP; 
         CLOSE cur; 
     END; 
EXCEPTION 
    WHEN NO_DATA_FOUND 
    THEN 
     DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack); 
    WHEN OTHERS 
    THEN 
     DBMS_OUTPUT.put_line (DBMS_UTILITY.format_error_stack); 

END; 
/
+0

我無法編譯,我不知道我得到了什麼。 PL/SQL:ORA-04052: ORA-00604 ORA-03106 – Przemek

+0

正在授予什麼權限來執行sql?對於plsql,您需要明確授予權限。 – user75ponic

+0

好的問題解決了!我創建VIEW這個選擇並在遊標中使用View – Przemek