#oracle #file #plsql #sqlplus #spool
Вопрос:
Я пишу с помощью команды spool в файл, и я хотел бы, чтобы, когда я закончу писать и воспользуюсь командой spool off, файл автоматически откроется для пользователя.
Как я могу автоматически открыть файл с помощью PL/SQL?
Спасибо!
Комментарии:
1. С PL/SQL? PL/SQL-это процедурный язык, который полностью работает внутри сервера базы данных. Он не имеет возможности взаимодействовать с дисплеем или клавиатурой клиента. И «spool» — это команда sqlplus, которая не имеет никакого отношения к языку pl/sql, поскольку вы говорите «автоматически открывается для пользователя», я предполагаю, что пользователь использует какой-то инструмент для отправки сценария sql. Так же, как в sqlplus есть команда «катушка» для записи всех выходных данных в файл, локальный для сеанса sqlplus, в нем также есть команда «редактировать», которая создаст редактор ОС по умолчанию (vi в linux, блокнот в Windblows).
2. @EdStevens просто для большей корректности повторно «отредактируйте»: не редактор ОС по умолчанию, но указанный в переменной
_EDITOR
, вы можете легко переопределить его, например:DEFINE _EDITOR ="/usr/bin/mcedit"
3. Короткий ответ: вы не можете. PL/SQL не может видеть ваши файлы и не знает, что вы загружаете. Он работает в базе данных.
Ответ №1:
SQL*Plus, SQL Developer и SQLcl имеют специальную команду HOST
для таких вещей:
Таким образом, вы можете добавить команду host
с open
помощью в Linux/Unix и start
в Windows. Например, я определяю переменную подстановки _START
в своем glogin
сценарии:
- on_login_nix.sql:
DEFINE _START ="open"
- on_login_win.sql:
DEFINE _START ="start"
а затем используйте его host amp;_START amp;spoolfile
, например, в моем скрипте sqlid_exec_html.sql
для отчетов RTSM:
spool amp;MON_FILE
SELECT
DBMS_SQLTUNE.REPORT_SQL_MONITOR(
SQL_ID => 'amp;MON_SQLID',
sql_exec_id => 'amp;MON_SQLEXEC',
report_level => 'ALL',
type => 'ACTIVE') as report
FROM dual
/
spool off
host amp;_START amp;MON_FILE
Но иногда (если shell/terminal поддерживает расширение вашего файла), вы можете просто ввести host amp;spoolfilename
.