МН Oracle / SQL - подсказки для непосредственного вывода / консольная печать

Телефон и кабельные компании поддерживают модель их топологии проводного соединения, которая в действительности является большой сетью или графиком. Рекурсия является одним способом пересечь эту модель, когда Вы хотите найти всего родителя или все дочерние элементы.

, Так как рекурсия является дорогой от обработки и перспективы памяти, этот шаг обычно только выполняется, когда топология изменяется, и результат хранится в измененном предварительно заказанном формате списка.

20
задан FrustratedWithFormsDesigner 13 November 2009 в 14:59
поделиться

8 ответов

У вас может быть процедура, которая записывает сообщения в таблицу с использованием автономной транзакции, например:

procedure log (p_message)
is
    pragma autonomous_transaction;
begin
    insert into message_log (user, datetime, message)
    values (user, sysdate, p_message);
    commit;
end;

Затем отслеживайте таблицу из другого сеанса Oracle.

18
ответ дан 30 November 2019 в 00:23
поделиться

Обычно есть два варианта:

  • Отправить вывод в таблицу Oracle (или временная таблица)
  • Запись в файловую систему (хоста базы данных) с помощью UTL_FILE

Если у вас нет доступа ОС к хосту базы данных, вы все равно можете писать в файловую систему dbhost и связывать внешне определенную таблицу Oracle в файл, чтобы его можно было запросить с помощью SELECT.

1
ответ дан 30 November 2019 в 00:23
поделиться

Это может зависеть от вашего клиентского инструмента. Я давно не использовал SQL * Plus, но когда я отлаживаю процедуры в PL / SQL Developer, я открываю командное окно и запускаю команду SET SERVEROUTPUT ON . Затем, когда я выполняю процедуру, все, что напечатано DBMS_OUTPUT.PUT_LINE , сразу появляется.

Редактировать: вы правы, я думаю, я видел это только с большим объемом вывода или что-то в этом роде. Как бы то ни было, я поискал в Интернете и наткнулся на log4plsql - может быть полезно.

1
ответ дан 30 November 2019 в 00:23
поделиться

В качестве альтернативы можно использовать конвейерную функцию, которая возвращает информацию о журналах. См. Пример здесь: http://berxblog.blogspot.com/2009/01/pipelined-function-vs-dbmsoutput.html Когда вы используете конвейерную функцию, вам не нужно использовать другой SQLPLUS / Toad / sql developer и т. Д. Сеанс.

1
ответ дан 30 November 2019 в 00:23
поделиться

Вы можете использовать DBMS Pipe и Pipe Viewer в PL / SQL Developer, чтобы асинхронно перехватывать всю информацию, когда она помещается в конвейер.

Будьте осторожны, помещайте вещи в конвейер только тогда, когда есть кто-то, кто их прочитает. В противном случае ваш вызов не удастся, когда канал заполнен.

Также существует возможность использования событий, PL / SQL Developer также имеет монитор событий. И в документации должен быть приведен пример того, как это сделать.

1
ответ дан 30 November 2019 в 00:23
поделиться

у нас есть небольшая хитрость для этого.

вы можете использовать DBMS_APPLICATION_INFO.set_client_info («некоторая информация здесь»); создать несколько переменных и заменить строку внутри "".

и использовать select client_info из v $ session для отслеживания прогресса.

9
ответ дан 30 November 2019 в 00:23
поделиться

Я использовал для этой цели dbms_pipe. Отправлять сообщения в именованный канал и читать их из другого сеанса. Этот метод может не работать в среде RAC, когда процессы записи и чтения могут подключаться к другому узлу.

В качестве альтернативы вы можете вставлять сообщения в таблицу, используя процедуру, которая выполняется в ее собственном сеансе с использованием «pragma autonomous_transaction». Вы можете запросить эти сообщения из другого сеанса

Изменить: я вижу, что мой второй вариант уже упоминался.

2
ответ дан 30 November 2019 в 00:23
поделиться

Другой вариант - пусть ваш PL / SQL вызовет процедуру для отправки электронного письма с записью в нем. Для этого требуется, чтобы ваша база данных имела возможность отправки электронной почты, которую можно добавить с помощью UTL_SMTP.

0
ответ дан 30 November 2019 в 00:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: