[oracle] Динамический вывод в консоль

kill-still

есть скрипт, который в DBMS_OUTPUT выводит % своего выполнения.
обычно пользуюсь SQL Navigator. Есть ещё жаба под рукой.
результат (буфер DBMS_OUTPUT) отображается только после завершения скрипта.
как сделать, чтобы оно отображалось рилтайм? (не обязательно DBMS_OUTPUT - можно и через что=нибудь другое, главное чтобы можно было смотреть % ?)

0000

Гадь в табличку автономными транзакциями.
P.S. Вообще странно, что через обычную консоль не отображается.

kill-still

неужели более вменяемых решений нет?

hprt

Да вроде не странно - он же просто в буффер помещает строку, когда там еще клиентская тула его прочитает. Можно наверное через GET_LINE(s) самому как-нить побыстрее смотреть :) Логирование в таблицу выглядит оптимальным :)

macrophage

тут уже предложили в табличку писать.
Плюс можно запускать из sql-plus, тогда в реальном времени выводить будет, либо spool-ить в файлик.
UPD
Посмотри, наверняка у Навигатора или Жабы есть команд виндоу. Попробуй оттуда пустить.

kill-still

объясни на пальцах плиз как в sqlplusw.exe запустить скрипт? (как подконнектится я уже разобрался).
набираю простой однострочный селект, жму ентер, ничего не происходит. жму файл -> запуск, тоже ноль внимания. :)

ifani

Попробуй в конце поставить точку с запятой (";") - на сколько я помню, он, пока её не встретит, будет ждать ввода.
Если что, то выполнить файл со скриптом: @полное_имя_файла (если расширение sql, то его можно не указывать)
Коммит - символ "/"

macrophage


объясни на пальцах плиз как в sqlplusw.exe запустить скрипт? (как подконнектится я уже разобрался).
набираю простой однострочный селект, жму ентер, ничего не происходит. жму файл -> запуск, тоже ноль внимания. :)
скорее всего, после команды надо "/" поставить.
Кажется я тебя обманул с sqlplus-ом.. Похоже, выводить начинает после отработки всего блока..
Я как-то сталкивался с подобным, надо было выводить на экран в режиме реального времени, я делал кажется так:
максимально разбил на блоки, один out_put - один блок,
далее писал скрипт, который запускал sql plus, и в sql plus уже спулил все в файлик, все это работало в фоне. далее читал этот файлик на экран, как sql plus дорабатывал килял чтение файла.
может как-то проще можно сделать, надо подумать...

kill-still

да, с точкой с запятой разобрался, селект простой выполняется.
а вот что-нибудь вроде
SET SERVEROUTPUT ON BEGIN DBMS_OUTPUT.enable; DBMS_OUTPUT.put_line ('start'); END;
не хочет =/
после нажатия ентера просто переходит на след. строчку, и всё.
Если даже после этого селект в след. строчку написать и нажать ентер, то опять на новую строчку переходит.

ifani

SET SERVEROUTPUT ON
BEGIN
   DBMS_OUTPUT.enable;
   DBMS_OUTPUT.put_line ('start');
END;
/
Вот так пробовал? :)

kill-still

да

kill-still

вот, дописал:
после нажатия ентера просто переходит на след. строчку, и всё.
Если даже после этого селект в след. строчку написать и нажать ентер, то опять на новую строчку переходит.

kill-still

всё, перезапустил его, вроде заработало

hprt

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

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.

ifani

Вообще, кстати, при выполнении скриптов через sqlplus можно использовать
prompt бла-бла-бла

Это как раз вывод на экран. Только я не помню, там только константные строки выводить можно или значения переменных тоже.
Ну и да, можно делать
spool filne_name.log

чтобы туда скидывалось содержимое буфера.

macrophage




В ответ на:
spool filne_name.log
чтобы туда скидывалось содержимое буфера.
Как часто он это делает? Как мне помнится/кажется после "/", так?

kill-still

В общем я решил забить. DBMS_OUTPUT только по завершении выводит, promрt только константы выводит и не работает в навигаторе/девелопере.
Оставить комментарий
Имя или ник:
Комментарий: