我有一个非常简单的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
到目前为止,我已经弄清楚了这一点:
此时我没有想法。有没有人遇到过这个错误?有什么可以做的吗?
答案 0 :(得分:1)
您可以按照指南中的示例操作,并将示例文件用作模板:
http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html#sqltool_embedded-langs-sect
答案 1 :(得分:0)
我也正为此扯头发。这些示例实际上并不能解决问题,但是有些修改使我到了那里。要处理嵌入式分号,您需要在“原始模式”下“分块”输入。要进入原始模式,请输入命令
\.
(是,斜杠)
然后输入您的代码,在线上
.;
如果仅将.;
放在END之后,它将不会被看到(我猜.;
本身就是一个命令)。
答案 2 :(得分:0)
当我使用包含SQL转义的单引号的HSQLDB执行SQL语句时,偶然发现了此错误:
INSERT INTO my_table ('Joe\'s string value');
上述语法似乎不正确(至少对于MySQL,例如,参见here),并且不应碰到它。作为参考,正确的转义语法是:
INSERT INTO my_table ('Joe''s string value');
因此使用''
而不是\'
。但是,传递给我的某些SQL转储确实包含这种转义语法,因此我不得不对其进行处理。