SQL モードを使用して Oracle データベースに接続します。linesize と pagesize、および colsep のデフォルト設定は理想的ではないため、データベースへの接続時に Emacs が次のコマンドを自動的に実行するようにしたいと考えています。
SET COLSEP "|"
SET LINESIZE 9999
SET PAGESIZE 9999
どうすればこれを達成できますか?
SQL モードを使用して Oracle データベースに接続します。linesize と pagesize、および colsep のデフォルト設定は理想的ではないため、データベースへの接続時に Emacs が次のコマンドを自動的に実行するようにしたいと考えています。
SET COLSEP "|"
SET LINESIZE 9999
SET PAGESIZE 9999
どうすればこれを達成できますか?
コマンドを実行するには、常に login.sql ファイルに含めることができます。http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch2.htm#i1133106 . ただし、これにより、SQL*Plus が Emacs 内から実行されているかどうかに関係なく、コマンドが実行されます。
sql-login-hook
comint関数を介してSQLを送信するための使用を正しく指摘したTobiasによる以前の回答から適応。
Postgres では、各コマンドを個別に送信する必要があったため、ここではそれを行ってcomint-send-string
いました (sql.el メンテナーの Michael は、これが実際に好ましい方法であると述べています)。
sql-login-hook
また、すべてのデータベース製品で同じことが使用されるため、sql-product
製品固有のコマンドを送信する前に確認することをお勧めします。この例では、Oracle のチェックを含めました。
(add-hook 'sql-login-hook 'my-sql-login-hook)
(defun my-sql-login-hook ()
"Custom SQL log-in behaviours. See `sql-login-hook'."
(when (eq sql-product 'oracle)
(let ((proc (get-buffer-process (current-buffer))))
(comint-send-string proc "SET COLSEP \"|\";\n")
(comint-send-string proc "SET LINESIZE 9999;\n")
(comint-send-string proc "SET PAGESIZE 9999;\n"))))
RETコマンドを対話的に送信するときに入力を再現するために、コマンドの最後に改行を含める必要があることに注意してください。(これを行わないと、コマンドは「入力」されたままにRETなりますが、プロンプトで手動で入力するまで有効になりません)。
それでも動作しない場合は、バッファ内の対話型 SQL プロンプトを認識した場合にsql-login-hook
のみ によって実行されることに注意してください。sql-product-interactive
このプロンプトは、正規表現を使用して照合されますsql-prompt-regexp
(これは、 の製品ごとのデフォルトを使用して確立されsql-product-alist
ます)。デフォルトのパターンがプロンプトと一致しない場合は、 で変更できますsql-interactive-mode-hook
。
たとえば、次の例では、Postgres プロンプトで_
単語構成文字だけでなく、シンボル構成文字 (アンダースコアなど) をデータベース名に含めることができます。
(add-hook 'sql-interactive-mode-hook 'my-sql-interactive-mode-hook)
(defun my-sql-interactive-mode-hook ()
"Custom interactive SQL mode behaviours. See `sql-interactive-mode-hook'."
(when (eq sql-product 'postgres)
;; Allow symbol chars in database names in the prompt.
;; Default postgres pattern was: "^\\w*=[#>] " (see `sql-product-alist').
(setq sql-prompt-regexp "^\\(?:\\sw\\|\\s_\\)*=[#>] ")))