2011-08-02 7 views
2

PL/SQL을 사용하여 보고서를 만들려고 할 때 다음과 같은 문제로 인해 두 테이블에 액세스하는 SQL 쿼리를 만들었습니다. 원격 DB 자체는 예상 된 결과를 반환 혼자 쿼리를 실행하는 DB 링크를 사용하지만 매우 동일한 쿼리를 실행하고 커서로 결과를 넣을 때 나는PL/SQL 스크립트에서 DB 링크를 사용하면 "테이블을 찾을 수 없습니다."라는 오류가 발생합니다.

PL/SQL: ORA-00942: table or view does not exist 

오류가 발생합니다.

내가 각 테이블에 사용하고있는 별칭과 관련이 있는지 또는 선택 문이 로컬 테이블을 선택하려고했는지 확실하지 않습니다. 모르겠다. 제안 사항이 있습니까?

PL/SQL :

DECLARE 
    CURSOR t_bug_details IS (SELECT h.* 
    FROM [email protected] h, 
     [email protected] rml 
    WHERE h.product_id IN (123) 
    AND h.category  IN ('category') 
    AND h.status   < 4 
    AND h.status NOT  IN (1,2,3) 
    AND h.release_status IN (upper('P')) 
    --AND h.programmer  IN (upper('MRFOO')) 
    AND h.some_id  = rml.some_id 
    and rownum <=400); 

REPORT_DAY VARCHAR2(40); 
mail_html clob; 
mail_bod clob; 

BEGIN 

FOR v_some_details in t_bug_details 
LOOP 
REPORT_DAY := TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'); 
DBMS_OUTPUT.PUT_LINE(REPORT_DAY || '|' || 
        v_some_details.reptnom || '|' || 
        v_some_details.subject || '|' || 
        v_some_details.field || '|' || 
        v_some_details.release_status || '|' || 
        v_some_details.status || '|' || 
        v_some_details.category || '|' || 
        v_some_details.sub_field || '|' || 
        v_some_details.datef1 || '|' || 
        v_some_details.field_by || '|' || 
        v_some_details.programmer || '|' || 
        TRUNC(sysdate - v_some_details.datef1) || '|' || 
        TRUNC(sysdate - v_some_details.upd_date)|| '|' || 
        v_some_details.fix_avail_date|| '|' || 
        v_some_details.bug_type || '|' || 
        v_some_details.base_reptnom); 
END LOOP; 

EXCEPTION WHEN NO_DATA_FOUND 
THEN 
DBMS_OUTPUT.PUT_LINE ('NO RECORDS FOUND'); 
END; 

답변

5

PL/SQL은 SQL이보다 서로 다른 권한으로 실행 할 수 있습니다. 사용자가 사용할 수 있지만 PL/SQL이 기본적으로 사용할 수없는 역할을 통해 부여 된 이러한 테이블에 대한 권한이 있다고 생각합니다. 정의 자의 권한과 호출자 권한의 차이입니다. 자세한 내용은 Oracle's documentation을 참조하십시오.

0

10g에서 동일한 오류가 발생했습니다.

  1. 개인 DB 링크를 생성하고 ora-00942 오류가 발생했습니다.

  2. 링크의 사용자는 테이블의 소유자가 아니라 그가 테이블 그래서

  3. 에 액세스 할 권한이 부여됩니다, 나는 공중 링크로 연결되는 링크를 변경 - 다음 모든 벌금을했다.