在尝试使用PL / SQL创建报告时我发现自己遇到了以下问题,我创建了一个SQL查询,使用数据库链接访问远程数据库上的2个表,单独运行查询本身会返回预期的结果,但是当我运行相同的查询并将结果放入游标时,我得到了一个
PL/SQL: ORA-00942: table or view does not exist
错误。
我不确定它是否与我为每个表使用的别名有关,或者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;
答案 0 :(得分:5)
PL / SQL可以在与SQL不同的权限下运行。我猜您对通过角色授予的这些表拥有权限,您的用户可以使用该角色,但默认情况下不能使用PL / SQL。这是定义者权利和赋予者权利之间的区别。有关详细信息,请参阅Oracle's documentation。
答案 1 :(得分:0)
我遇到与10g相同的错误。
当我创建私人数据库链接并收到ora-00942错误时,就发生了这种情况。
链接的用户不是表的所有者,但他被授予访问权限的权限 表格
所以,我将链接更改为公共链接 - 然后一切正常 细