尝试使用带有HSQLDB 2.2.8的SQL工具创建存储过程时出现未终止的输入错误
我有一个非常简单的HSQLDB CREATE PROCEDURE语句:尝试使用带有HSQLDB 2.2.8的SQL工具创建存储过程时出现未终止的输入错误,sql,stored-procedures,hsqldb,Sql,Stored Procedures,Hsqldb,我有一个非常简单的HSQLDB CREATE PROCEDURE语句: CREATE PROCEDURE test_procedure() CONTAINS SQL BEGIN DECLARE test_variable INTEGER; SET test_variable = 0; END 当我尝试使用SQLTool执行此SQL时,它失败并出现“Unterminated input”错误。我使用的命令是: java -jar -cp $HSQLDB_HOME/lib/sqltool.jar:
CREATE PROCEDURE test_procedure()
CONTAINS SQL
BEGIN
DECLARE test_variable INTEGER;
SET test_variable = 0;
END
当我尝试使用SQLTool执行此SQL时,它失败并出现“Unterminated input”错误。我使用的命令是:
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
到目前为止,我已经了解了很多:
我现在没有主意了。有人遇到过这个错误吗?有什么可以做的吗?您可以按照指南中的示例,使用示例文件作为模板:
我也在为这件事发愁。这些例子实际上并没有解决问题,但稍加修改就解决了问题。要处理嵌入的分号,您需要在“原始模式”中“分块”输入。要进入原始模式,请输入命令
\。
(是,斜线点)
然后你的代码,然后,在新行上
.;
如果你只是把
代码>结束后,它将不会被看到(我猜;
本身就是一个命令)。我在使用包含SQL转义单引号的HSQLDB执行SQL语句时偶然发现了这个错误,例如:
INSERT INTO my_table ('Joe\'s string value');
上面的语法似乎不正确(至少对于MySQL,请参见示例),不应该遇到它。作为参考,正确的转义语法为:
INSERT INTO my_table ('Joe''s string value');
所以用'
而不是\'
。然而,传递给我的一些SQL转储确实包含这种转义语法,我必须处理它。感谢链接-我在第一个示例中找到了答案。缺少的东西是一个。;在CREATE PROCEDURE语句的末尾