如何在PL/SQL开发人员中的命令窗口中运行脚本时显示DBMS_OUTPUT?

发布于 2025-01-17 14:58:15 字数 1267 浏览 7 评论 0原文

这是 这个

我正在尝试在命令行窗口中的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

全部不再 2025-01-24 14:58:15

事实证明,问题不在于 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文