Select 游标中的查询选择错误

Select 游标中的查询选择错误,select,plsql,cursor,procedure,Select,Plsql,Cursor,Procedure,我的选择光标有问题。Select在其他窗口正常工作,但我在使用光标的过程中出错。为什么? 我更改了Tabele和数据库的名称,但在这个过程之外选择OK 我的错误: PL/SQL:ORA-04052: ORA-00604: ORA-03106: 通过添加异常块,您可以尝试处理您遇到的错误吗 CREATE OR REPLACE PROCEDURE ChangeDismissDate IS BEGIN DECLARE v_id VARCHAR2(40);

我的选择光标有问题。Select在其他窗口正常工作,但我在使用光标的过程中出错。为什么? 我更改了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  bazaabc.EmployeesDetails@BAZA_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;
/

你得到了什么类型的错误?好的,我编辑了文章,我写了错误,我想这与权限有关。当您执行plsql过程时,请检查您通过dblink访问的表是否具有权限。我认为这是可以的,因为选择它在该过程之外工作。我无法编译,也不知道我得到了什么。PL/SQL:ORA-04052:ORA-00604 ORA-03106授予执行SQL的权限是什么?对于plsql,您需要显式授予权限。确定问题已解决!!我创建此视图,在光标中选择并使用视图
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  bazaabc.EmployeesDetails@BAZA_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;
/