更改 Squirrel SQL 定界符 | AI生成和翻译

Home 2026.01

Question: 如何在 Squirrel SQL Client 中设置/更改分隔符(特别是针对使用 BEGIN … END 且需要类似 @@ 或 @ 这种不同分隔符的 stored procedures)?

Answer:

Squirrel SQL Client 中,默认的语句分隔符是 ;
当创建或调用在主体(BEGIN … END 代码块)内包含 ; 的 stored procedures / functions / triggers 时,你必须临时更改分隔符。

以下是在 Squirrel-SQL 中实现此操作的主要方法:

推荐且最常用的方法 (2024–2026 风格)

  1. 进入 SQL worksheet (编写脚本的地方)
  2. 在脚本的最顶部,写入:
--#SET TERMINATOR @@

DELIMITER @@

CREATE PROCEDURE my_proc()
BEGIN
    INSERT INTO log VALUES(NOW(), 'start');
    -- 许多使用普通 ; 的语句
    INSERT INTO log VALUES(NOW(), 'end');
END@@

DELIMITER ;
  1. 然后执行整个脚本(Ctrl+Enter 或点击“跑步者”图标)

--#SET TERMINATOR xx 是一个 SQuirreL 特殊注释,用于更改 当前 session/tab 的分隔符。

常用的选项包括:

--#SET TERMINATOR @@        ← 最流行
--#SET TERMINATOR $
--#SET TERMINATOR //
--#SET TERMINATOR \G
--#SET TERMINATOR @          ← 你提到的

其他可行的方法

方法 2 – 使用 Session Properties 菜单

方法 3 – 快速单行风格 (对 MySQL/MariaDB 友好)

许多人仍然沿用“经典”写法:

DELIMITER @@

CREATE PROCEDURE example()
BEGIN
    SELECT 1;
    SELECT 2;
END @@

DELIMITER ;

只要你没有禁用 “Process SQL comments” 或 “Allow # as comment” 设置,SQuirreL 就能正确理解这种语法。

快速经验法则 – 2025/2026 年大多数人的做法

--#SET TERMINATOR @@

DROP PROCEDURE IF EXISTS my_proc@@

CREATE PROCEDURE my_proc(IN p_id INT)
BEGIN
    DECLARE v_name VARCHAR(100);
    SET v_name = 'test';
    INSERT INTO t1 (id, name) VALUES (p_id, v_name);
    -- 更多带有普通分号的业务逻辑
END@@

--#SET TERMINATOR ;     ← 重置是一个好习惯

总结 – 选择一种风格

风格 A (整洁且现代)

--#SET TERMINATOR @@
... 你的 procedure ...
--#SET TERMINATOR ;

风格 B (经典 MySQL workbench 风格)

DELIMITER @@
... 你的 procedure ...
DELIMITER ;

两者在当前的 SQuirreL 版本(4.x, 202x builds)中都能很好地工作。

希望这能帮你解决 “You have an error in your SQL syntax … near END” 的问题。

References:


Back

x-ai/grok-4.1-fast

Donate