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