Печать значения переменной в SQL Developer

#oracle #stored-procedures #dbms-output

Вопрос:

Я хотел напечатать значение определенной переменной, которая находится внутри анонимного блока. Я использую Oracle SQL Developer. Я пробовал использовать dbms_output.put_line . Но это не работает. Код, который я использую, показан ниже.

 SET SERVEROUTPUT ON  DECLARE   CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;  V_ALL_COLS VARCHAR2(500);   CURSOR CURSOR_TABLE  IS  SELECT OBJECT_NAME   FROM USER_OBJECTS   WHERE OBJECT_TYPE='TABLE'  AND OBJECT_NAME LIKE 'tb_prm_%';   CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)  IS  SELECT COLUMN_NAME  FROM ALL_TAB_COLS  WHERE TABLE_NAME = V_TABLE_NAME;  BEGIN   OPEN CURSOR_TABLE;   LOOP  FETCH CURSOR_TABLE INTO CTABLE;  EXIT WHEN CURSOR_TABLE%NOTFOUND;   OPEN CURSOR_COLUMNS (CTABLE);   V_ALL_COLS := NULL;   LOOP  FETCH CURSOR_COLUMNS INTO CCOLUMN;  V_ALL_COLS := V_ALL_COLS || CCOLUMN;  IF CURSOR_COLUMNS%FOUND THEN  V_ALL_COLS := V_ALL_COLS || ', ';  ELSE  EXIT;  END IF;  END LOOP;   DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);   END LOOP;  CLOSE CURSOR_TABLE;  END;  

И я получаю результат только как anonymous block completed .

Комментарии:

1. вывод выводится в конце/завершении программы, так это работает. Вы не можете смыть для отображения во время работы. Загляните в таблицы журналов (автономная транзакция), чтобы узнать, что происходит во время работы программы

2. Почему бы не использовать встроенный отладчик и не пройти через свой блок. Он показывает состояние всех переменных.

3. УСТАНОВИТЕ SERVEROUTPUT НА; —добавьте точку с запятой, выберите ВСЕ и запустите в разработчике, для меня все работает нормально,

Ответ №1:

Вам нужно включить dbms_output. В Oracle SQL Developer:

  1. Показать окно вывода СУБД (Вид-gt;Вывод СУБД).
  2. Нажмите кнопку » » в верхней части окна вывода СУБД, а затем выберите открытое подключение к базе данных в открывшемся диалоговом окне.

В SQL*Плюс:

 SET SERVEROUTPUT ON  

Комментарии:

1. В версии 1.5.5 у меня, похоже, нет этой опции в поле зрения. Там Есть Связи, Файлы, Отчеты… Строка состояния, Панели инструментов, Обновление, но без вывода СУБД. Много чего в разделе «Настройки», но я все еще не вижу возможности для вывода.

2. @ruffin: v1.5.5 3 года. Я использую v3.0, и текущая версия, похоже, v3.1.

3. /кивает, что мы застряли на 1.5.5-если бы у вас был под рукой ответ, я бы его принял, но в противном случае nps. Спасибо!

4. Я установил опцию «ВКЛЮЧИТЬ вывод СЕРВЕРА» в первой строке файла sql.

Ответ №2:

Разработчик SQL, похоже, выводит текст DBMS_OUTPUT только в том случае, если вы явно включили панель окна DBMS_OUTPUT.

Перейдите в (Меню) ВИД -gt; Dbms_output, чтобы вызвать панель.

Нажмите на зеленый знак Плюс, чтобы включить вывод для вашего подключения, а затем запустите код.

ПРАВКА: Не забудьте установить размер буфера в соответствии с ожидаемым объемом вывода.

Ответ №3:

Сделайте вывод сервера в первую очередь

  1. SET SERVEROUTPUT on затем
  2. Перейдите в окно Вывода СУБД (Вид-gt;Вывод СУБД)
  3. затем нажмите Ctrl N для подключения сервера

Ответ №4:

Есть 2 варианта:

 set serveroutput on format wrapped;  

или

Откройте меню «Просмотр» и нажмите «Вывод СУБД». Вы должны получить окно вывода СУБД в нижней части рабочего листа. Затем вам нужно добавить соединение (по какой-то причине это не делается автоматически).

Ответ №5:

1 ) Перейдите в меню «Просмотр».
2 ) Выберите пункт меню DBMS_OUTPUT.
3 ) Нажмите Ctrl Nи выберите редактор соединений.
4 ) Выполните команду SET SERVEROUTPUT ПО команде.
5 ) Затем выполните свой сценарий PL/SQL.

введите описание изображения здесь введите описание изображения здесь

Ответ №6:

 DECLARE   CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;  V_ALL_COLS VARCHAR2(5000);   CURSOR CURSOR_TABLE  IS  SELECT OBJECT_NAME   FROM USER_OBJECTS   WHERE OBJECT_TYPE='TABLE'  AND OBJECT_NAME LIKE 'STG%';   CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)  IS  SELECT COLUMN_NAME  FROM ALL_TAB_COLS  WHERE TABLE_NAME = V_TABLE_NAME;  BEGIN   OPEN CURSOR_TABLE;  LOOP  FETCH CURSOR_TABLE INTO CTABLE;   OPEN CURSOR_COLUMNS (CTABLE);  V_ALL_COLS := NULL;  LOOP   FETCH CURSOR_COLUMNS INTO CCOLUMN;  V_ALL_COLS := V_ALL_COLS || CCOLUMN;  IF CURSOR_COLUMNS%FOUND THEN  V_ALL_COLS := V_ALL_COLS || ', ';  ELSE  EXIT;  END IF;  END LOOP;  close CURSOR_COLUMNS ;  DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);  EXIT WHEN CURSOR_TABLE%NOTFOUND;  END LOOP;`enter code here`  CLOSE CURSOR_TABLE;  END;  

Я добавил Закрытие второго курсора. Он работает и тоже получает результат…

Ответ №7:

В более новых версиях разработчика SQL больше нет отдельного представления вывода, которое вам нужно отображать, вместо этого оно всегда присутствует в виде вкладки. Под вашим списком вкладок (которые разработчик SQL называет «окнами», например, две области ввода SQL) есть другой список вкладок, называемый «SQL», «Вывод» и «Статистика». Вывод не откроется автоматически, вам нужно нажать на вкладку.

Ответ №8:

выберите в меню Вид—gt;Вывод СУБД и

Ответ №9:

Перейдите в окно Вывода СУБД (Вид-gt;Вывод СУБД).