2011-08-02 4 views
2

PL/SQLを使用してレポートを作成しようとしているときに、次の問題を抱えています。リモートDBは、自身が期待した結果を返すだけで、クエリを実行し、DBリンクを使用しますが、私は非常に同じクエリを実行し、カーソルに結果を入れたとき、私はPL/SQLスクリプトでDBリンクを使用すると「テーブルが見つかりません」というエラーが発生する

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

エラーが発生します。

私は各テーブルに使用しているエイリアスと何か関係があるのか​​わからないのですか、あるいはselectステートメントがローカルテーブルを選択しようとしていると思いますが、わかりません。

PL/SQL: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は、異なる権利の下で実行することができます。私はあなたのユーザーが使用できるロールを介して付与されたこれらのテーブルに対する権利を持っていると推測していますが、PL/SQLはデフォルトでは使用できません。定義者の権利と呼び出し側の権利の違いです。詳細については、Oracle's documentationを参照してください。

0

10gで同じエラーが発生しました。

  1. 私はプライベートDBリンクを作成し、ora-00942エラーが発生しました。

  2. リンクの利用者がテーブルの所有者ではありませんが、彼は テーブルそう

  3. にアクセスすることを許可され、私は公共のリンクへのリンクを変更 - そして、すべてが 罰金を働きました。