如何在PL/SQL开发人员中的命令窗口中运行脚本时显示DBMS_OUTPUT?
这是 这个
我正在尝试在命令行窗口中的 PL/SQL Developer 中运行以下脚本:
DECLARE
ncount NUMBER;
vwhere VARCHAR2(1000) := '';
vselect VARCHAR2(1000) := ' select count(1) from ';
vsearchstr VARCHAR2(1000) := 'put your string here';
vline VARCHAR2(1000) := '';
BEGIN
DBMS_OUTPUT.ENABLE;
FOR k IN (SELECT a.table_name, a.column_name
FROM user_tab_cols a
WHERE a.data_type LIKE '%VARCHAR%')
LOOP
vwhere := ' where ' || k.column_name || ' = :vsearchstr ';
EXECUTE IMMEDIATE vselect || k.table_name || vwhere
INTO ncount
USING vsearchstr;
IF (ncount > 0)
THEN
dbms_output.put_line(k.column_name || ' ' || k.table_name);
ELSE
dbms_output.put_line('no output');
END IF;
END LOOP;
dbms_output.get_line(vline, istatus);
END;
/
该脚本应该在整个数据库中搜索 vsearchstr 中给出的字符串 和输出它在其中找到它的表和列。如果未找到该字符串,它将输出“无输出”。
当我运行它时,它告诉我 PL/SQL 过程成功完成
,但我没有看到来自 dbms_output 的任何输出。无论脚本的结果如何,我都希望看到一些内容,因为无论它是否找到字符串,它都会向 dbms_output 输出一些内容。即使我在运行脚本之前使用 set serveroutput on
打开 serveroutput,情况也是如此。
谁能告诉我出了什么问题吗?输出是否打印在其他地方?这会是哪里?
This is a follow up question to this
I am trying to run the following script in PL/SQL Developer in a Command Window:
DECLARE
ncount NUMBER;
vwhere VARCHAR2(1000) := '';
vselect VARCHAR2(1000) := ' select count(1) from ';
vsearchstr VARCHAR2(1000) := 'put your string here';
vline VARCHAR2(1000) := '';
BEGIN
DBMS_OUTPUT.ENABLE;
FOR k IN (SELECT a.table_name, a.column_name
FROM user_tab_cols a
WHERE a.data_type LIKE '%VARCHAR%')
LOOP
vwhere := ' where ' || k.column_name || ' = :vsearchstr ';
EXECUTE IMMEDIATE vselect || k.table_name || vwhere
INTO ncount
USING vsearchstr;
IF (ncount > 0)
THEN
dbms_output.put_line(k.column_name || ' ' || k.table_name);
ELSE
dbms_output.put_line('no output');
END IF;
END LOOP;
dbms_output.get_line(vline, istatus);
END;
/
This script is supposed to search the entire database for the string given in vsearchstr
and output the table and column it found it in. It outputs 'no output' if the string isn't found.
When I run it, it tells me PL/SQL procedure successfully completed
but I do not see any output coming from dbms_output. I expect to see something regardless of the results of the script as it outputs something to dbms_output regardless of whether it finds the string or not. This is the case even when I turn on serveroutput with set serveroutput on
before running the script.
Can anyone tell what's wrong? Is the output being printed somewhere else? Where would this be?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事实证明,问题不在于 dbms_output,而在于两件事:1) dbms_output.get_line(vline, isstatus) 正在清除输出缓冲区,2) 只有一组限制表FOR 循环正在搜索,其中没有任何 VARCHAR 列。我正在将搜索范围扩大到 all_tab_columns。
It turns out the problem wasn't with dbms_output, but two things: 1)
dbms_output.get_line(vline, istatus)
was clearing the output buffer, and 2) there were only a limit set of table the FOR loop was searching through, none of which had any VARCHAR columns. I am expanding my search to all_tab_columns.