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

#oracle #plsql #oracle-sqldeveloper

#Oracle #plsql #oracle-sqldeveloper

Вопрос:

Я хотел напечатать значение определенной переменной, которая находится внутри анонимного блока. Я использую 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. Показать окно вывода СУБД (Просмотр-> Вывод СУБД).
  2. Нажмите кнопку » » в верхней части окна вывода СУБД, а затем выберите открытое подключение к базе данных в открывшемся диалоговом окне.

В SQL * Plus:

  SET SERVEROUTPUT ON
 

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

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

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

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

4. Я установил опцию «SET SERVEROUTPUT ON» в первой строке файла sql.

Ответ №2:

Похоже, что SQL Developer выводит текст DBMS_OUTPUT только тогда, когда вы явно включили панель окна DBMS_OUTPUT.

Перейдите в меню VIEW -> Dbms_output, чтобы вызвать панель.

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

РЕДАКТИРОВАТЬ: не забудьте установить размер буфера в соответствии с ожидаемым объемом вывода.

Ответ №3:

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

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

Ответ №4:

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

 set serveroutput on format wrapped;
 

или

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

Ответ №5:

1) Перейдите в меню «Вид».
2 ) Выберите пункт меню DBMS_OUTPUT.
3 ) Нажмите Ctrl Nи выберите редактор подключений.
4 ) Выполните команду SET SERVEROUTPUT ON.
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 developer больше нет отдельного представления вывода, которое вам нужно показывать, вместо этого оно всегда есть в виде вкладки. Под вашим списком вкладок (который SQL developer называет «windows», например, две области ввода SQL) есть еще один список вкладок, называемых «SQL», «Вывод» и «Статистика». Вывод не откроется автоматически, вам нужно нажать на вкладку.

Ответ №8:

выберите View—> DBMS Output в меню и

Ответ №9:

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