【问题标题】:Unterminated input error trying to create a stored procedure using SQL Tool with HSQLDB 2.2.8尝试使用带有 HSQLDB 2.2.8 的 SQL 工具创建存储过程时出现未终止的输入错误
【发布时间】:2012-08-19 05:04:37
【问题描述】:

我有一个非常简单的 HSQLDB CREATE PROCEDURE 语句:

CREATE PROCEDURE test_procedure()
CONTAINS SQL
BEGIN
DECLARE test_variable INTEGER;
SET test_variable = 0;
END

当我尝试使用 SQLTool 执行此 SQL 时,它失败并出现“未终止的输入”错误。我使用的命令是:

java -jar -cp $HSQLDB_HOME/lib/sqltool.jar:$HSQLDB_HOME/lib/hsqldb.jar $HSQLDB_HOME/lib/sqltool.jar db script.sql

我得到的确切错误是:

SEVERE  Error at 'script.sql' line 7:
"? CREATE PROCEDURE test_procedure()
CONTAINS SQL
BEGIN ATOMIC
DECLARE test_variable INTEGER;
SET test_variable = 0;
END"
Unterminated input:  "CREATE PROCEDURE test_procedure()
CONTAINS SQL
BEGIN ATOMIC
DECLARE test_variable INTEGER;
SET test_variable = 0;
END"
org.hsqldb.cmdline.SqlTool$SqlToolException

到目前为止,我已经弄清楚了这么多:

  1. 如果我使用 HSQLDB 提供的 GUI 工具之一(如 DatabaseManagerSwing)运行此 SQL,它可以正常工作。
  2. 我可以使用完全相同的命令(选择、插入、删除等)执行其他 SQL 语句,但不能使用 CREATE PROCEDURE
  3. 我的 script.sql 文件只包含 6 行,但错误提到了第 7 行,这对我来说毫无意义
  4. 在文件中的 SQL 末尾添加分号没有区别
  5. 我在 Windows 和 Linux 上都试过了,结果完全相同
  6. 我尝试通过标准输入将文件传递给 SQL 工具,并使用内联 SQL 获得完全相同的结果
  7. 我已尝试将存储过程主体更改为其他内容,但没有任何作用

我现在没有想法。有没有人遇到过这个错误?有什么可以解决的吗?

【问题讨论】:

    标签: sql stored-procedures hsqldb


    【解决方案1】:

    我在使用包含 SQL 转义单引号的 HSQLDB 执行 SQL 语句时偶然发现了这个错误,例如:

    INSERT INTO my_table ('Joe\'s string value');
    

    上述语法似乎不正确(至少对于 MySQL,请参见 here 示例)并且不应该遇到它。作为参考,正确的转义语法是:

    INSERT INTO my_table ('Joe''s string value');
    

    所以使用'' 而不是\'。然而,传递给我的一些 SQL 转储确实包含这样的转义语法,我不得不处理它。

    【讨论】:

      【解决方案2】:

      我也在为此拉头发。这些示例实际上并没有解决问题,但稍加修修补补让我到了那里。要处理嵌入的分号,您需要在“原始模式”中“分块”输入。要进入原始模式,请输入命令 \.(是的,斜线点) 然后你的代码,ON A NEW LINE

      .;
      

      如果你只是把.;放在END之后,它就不会被看到(我猜.;本身就是一个命令)。

      【讨论】:

        【解决方案3】:

        您可以按照指南中的示例并使用示例文件作为模板:

        http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html#sqltool_embedded-langs-sect

        【讨论】:

        • 感谢您的链接 - 我在第一个示例中找到了答案。缺少的是一个 .;在 CREATE PROCEDURE 语句的末尾
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-05
        • 2021-01-24
        • 1970-01-01
        相关资源
        最近更新 更多