在PL/SQL脚本上使用DB链接会引发"找不到表"错误

per*_*ter 2 oracle plsql ora-00942 oracle-apex

虽然试图创建一个使用PL/SQL我发现自己坚持了以下问题的报告,我创建了访问使用DB连接远程DB 2代表的SQL查询,单独运行查询本身返回预期的结果,但是当我运行相同的查询并将结果放入我得到的游标中

PL/SQL: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

错误.

我不确定它是否与我为每个表使用的别名有关,或者select语句可能试图选择本地表,我不知道,你有什么建议吗?

PL/SQL:

DECLARE
   CURSOR t_bug_details IS (SELECT h.*
  FROM table1@REMOTEDB h,
       table2@REMOTEDB 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;
Run Code Online (Sandbox Code Playgroud)

Cra*_*aig 5

PL/SQL可以在不同于SQL的权限下运行.我猜您对通过角色授予的这些表拥有权限,您的用户可以使用该角色,但默认情况下不能使用PL/SQL.这是定义者权利和赋予者权利之间的区别.有关更多信息,请参阅Oracle的文档.