gpt4 book ai didi

oracle - 如何定义在启动 sql 模式时运行的命令?

转载 作者:行者123 更新时间:2023-12-02 07:25:26 25 4
gpt4 key购买 nike

我使用 Sql 模式连接到 Oracle 数据库。 linesize 和 pagesize 以及 colsep 的默认设置并不理想,因此我希望 Emacs 在连接到我的数据库时自动运行以下命令:

SET COLSEP "|"
SET LINESIZE 9999
SET PAGESIZE 9999

我怎样才能做到这一点?

最佳答案

改编自 Tobias 之前的回答,该回答正确指出了使用 sql-login-hook 通过 comint 函数发送 SQL。

使用 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-login-hook 仅由 sql-product-interactive 运行(如果它识别出交互式 SQL 提示)缓冲区。此提示使用正则表达式 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_\\)*=[#>] ")))

关于oracle - 如何定义在启动 sql 模式时运行的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26761521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com