[oracle] Динамический вывод в консоль
P.S. Вообще странно, что через обычную консоль не отображается.
неужели более вменяемых решений нет?
Да вроде не странно - он же просто в буффер помещает строку, когда там еще клиентская тула его прочитает. Можно наверное через GET_LINE(s) самому как-нить побыстрее смотреть Логирование в таблицу выглядит оптимальным
Плюс можно запускать из sql-plus, тогда в реальном времени выводить будет, либо spool-ить в файлик.
UPD
Посмотри, наверняка у Навигатора или Жабы есть команд виндоу. Попробуй оттуда пустить.
набираю простой однострочный селект, жму ентер, ничего не происходит. жму файл -> запуск, тоже ноль внимания.
Если что, то выполнить файл со скриптом: @полное_имя_файла (если расширение sql, то его можно не указывать)
Коммит - символ "/"
скорее всего, после команды надо "/" поставить.
объясни на пальцах плиз как в sqlplusw.exe запустить скрипт? (как подконнектится я уже разобрался).
набираю простой однострочный селект, жму ентер, ничего не происходит. жму файл -> запуск, тоже ноль внимания.
Кажется я тебя обманул с sqlplus-ом.. Похоже, выводить начинает после отработки всего блока..
Я как-то сталкивался с подобным, надо было выводить на экран в режиме реального времени, я делал кажется так:
максимально разбил на блоки, один out_put - один блок,
далее писал скрипт, который запускал sql plus, и в sql plus уже спулил все в файлик, все это работало в фоне. далее читал этот файлик на экран, как sql plus дорабатывал килял чтение файла.
может как-то проще можно сделать, надо подумать...
а вот что-нибудь вроде
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line ('start'); END;не хочет =/
после нажатия ентера просто переходит на след. строчку, и всё.
Если даже после этого селект в след. строчку написать и нажать ентер, то опять на новую строчку переходит.
SET SERVEROUTPUT ONВот так пробовал?
BEGIN
DBMS_OUTPUT.enable;
DBMS_OUTPUT.put_line ('start');
END;
/
да
после нажатия ентера просто переходит на след. строчку, и всё.
Если даже после этого селект в след. строчку написать и нажать ентер, то опять на новую строчку переходит.
всё, перезапустил его, вроде заработало
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.enable;
DBMS_OUTPUT.put_line ('start');
END;
/
а не в одну строку, как ты хочешь. А если скрипт длиннее будет? К тому же тебе уже написали, что надо слеш писать
Ну и из документации.
Typing SET SERVEROUTPUT ON in SQL*Plus has the effect of invoking
DBMS_OUTPUT.ENABLE (buffer_size => NULL);
with no limit on the output.
You should generally avoid having application code invoke either the DISABLE Procedure or ENABLE Procedure because this could subvert the attempt of an external tool like SQL*Plus to control whether or not to display output.
Note:
Messages sent using DBMS_OUTPUT are not actually sent until the sending subprogram or trigger completes. There is no mechanism to flush output during the execution of a procedure.
prompt бла-бла-бла
Это как раз вывод на экран. Только я не помню, там только константные строки выводить можно или значения переменных тоже.
Ну и да, можно делать
spool filne_name.log
чтобы туда скидывалось содержимое буфера.
Как часто он это делает? Как мне помнится/кажется после "/", так?
чтобы туда скидывалось содержимое буфера.
В ответ на:
spool filne_name.log
В общем я решил забить. DBMS_OUTPUT только по завершении выводит, promрt только константы выводит и не работает в навигаторе/девелопере.
Оставить комментарий
kill-still
есть скрипт, который в DBMS_OUTPUT выводит % своего выполнения.обычно пользуюсь SQL Navigator. Есть ещё жаба под рукой.
результат (буфер DBMS_OUTPUT) отображается только после завершения скрипта.
как сделать, чтобы оно отображалось рилтайм? (не обязательно DBMS_OUTPUT - можно и через что=нибудь другое, главное чтобы можно было смотреть % ?)