我创建了以下PL/SQL过程:
CREATE OR REPLACE PROCEDURE "REF_COPY_DB"()
AS
concept varchar2(10000);
BEGIN
dbms_output.put_line('hello test 1');
FOR concept IN (
SELECT
table_name
FROM
all_tables
WHERE
owner = 'WLCR_DEV08'
AND table_name LIKE '%_REF'
AND table_name IN (
'CURRENCY_ROLE_WS_REF')
) LOOP
dbms_output.put_line('hello test 2'); -- not getting printed
END LOOP;
END;
/
并使用以下语句执行它:call ref_copy_db()
我在script output
-〉hello test 1 call completed
和dbms output
窗口-〉hello test 1
下看到以下内容
从WLCR_DEV02
数据库调用该过程。hello test 2
没有被打印。不知道为什么会发生这种情况。因为我在WLCR_DEV02
上运行了内部语句
SELECT
table_name
FROM
all_tables
WHERE
owner = 'WLCR_DEV08'
AND table_name LIKE '%_REF'
AND table_name IN (
'CURRENCY_ROLE_WS_REF')
脚本输出窗口将打印出以下内容:
表名----------------------------------------------------------------------
货币角色WS参考
这意味着循环有数据要迭代,但由于某种原因,它没有进入循环块,可能是因为DBMS输出行没有被打印出来。
这可能是什么原因呢?有什么办法来调试它吗?
1条答案
按热度按时间ijnw1ujt1#
您可以通过检查过程中有多少行匹配来开始调试问题:
如果你发现你得到0行或一个异常,那么你可以更深入地研究。
ALL_TABLES
视图?WLCR_DEV08
用户是否只能通过授予的角色访问ALL_TABLES
视图?在这种情况下,过程将没有访问权限,因为它不会应用来自角色的权限。WLCR_DEV08
用户拥有的ALL_TABLES
表或视图来隐藏SYS.ALL_TABLES
视图?在这种情况下,请尝试SELECT ... FROM SYS.ALL_TABLES ...