通过 SQL 工具运行的 HSQLDB 存储过程抛出扫描仪错误
Posted
技术标签:
【中文标题】通过 SQL 工具运行的 HSQLDB 存储过程抛出扫描仪错误【英文标题】:HSQLDB Stored Procedure ran through SQL Tool is throwing Scanner Error 【发布时间】:2019-03-21 21:54:10 【问题描述】:从 Swing UI 我可以一一执行以下脚本。
ALTER CATALOG PUBLIC RENAME TO SOMENAME;
CREATE SCHEMA SOMESCHEMA;
SET DATABASE SQL SYNTAX ORA TRUE;
CREATE PROCEDURE SOMENAME.SOMESCHEMA.SP_FAILED_COUNT(IN i_ssn VARCHAR(100), IN i_page_id NUMBER(10), IN i_ip_address VARCHAR(100), IN i_session_guid VARCHAR(100), OUT o_toomanyfails VARCHAR(2000))
READS SQL DATA
BEGIN ATOMIC
SET o_toomanyfails = 'N';
END
.;
但是当我从 SQL 工具运行相同的程序时,我收到以下错误
> java -jar sqltool-2.4.1.jar --rcfile=C:\my-files\sqltool.rc web C:\my-files\hello.sql
SEVERE Rolling back SQL transaction.
Exception in thread "main" java.lang.Error: Error: could not match input
at org.hsqldb.cmdline.sqltool.SqlFileScanner.zzScanError(Unknown Source)
at org.hsqldb.cmdline.sqltool.SqlFileScanner.yylex(Unknown Source)
at org.hsqldb.cmdline.SqlFile.scanpass(Unknown Source)
at org.hsqldb.cmdline.SqlFile.execute(Unknown Source)
at org.hsqldb.cmdline.SqlTool.objectMain(Unknown Source)
at org.hsqldb.cmdline.SqlTool.main(Unknown Source)
我在堆栈溢出中发现了类似的问题。解决方案是添加 .;在末尾。但即使添加了 .;我遇到了同样的错误。
我还添加了“。”在第一行启用原始模式。现在我得到了不同的异常
.
ALTER CATALOG PUBLIC RENAME TO SOMENAME;
CREATE SCHEMA SOMESCHEMA;
SET DATABASE SQL SYNTAX ORA TRUE;
CREATE PROCEDURE SOMENAME.SOMESCHEMA.SP_FAILED_COUNT(IN i_ssn VARCHAR(100), IN i_page_id NUMBER(10), IN i_ip_address VARCHAR(100), IN i_session_guid VARCHAR(100), OUT o_toomanyfails VARCHAR(2000))
READS SQL DATA
BEGIN ATOMIC
SET o_toomanyfails = 'N';
END
.;
例外
> java -jar sqltool-2.4.1.jar --rcfile=C:\my-files\sqltool.rc web C:\my-files\hello.sql
SEVERE SQL Error at 'C:\my-files\hello.sql' line 2:
".
ALTER CATALOG PUBLIC RENAME TO SOMENAME"
malformed numeric constant: .
org.hsqldb.cmdline.SqlTool$SqlToolException
【问题讨论】:
【参考方案1】:您通过发出特殊命令“.”开始原始模式。然后,您可以以任何您想要的格式输入尽可能多的文本。完成后,输入仅包含“.;”的行将输入存储到编辑缓冲区并将其发送到数据库服务器以执行。
查看指南:
http://hsqldb.org/doc/2.0/util-guide/sqltool-chapt.html#sqltool_raw-sect
【讨论】:
我添加了“。”在我的 .sql 文件的第一行并运行命令。我收到以下异常 - > java -jar sqltool-2.4.1.jar --rcfile=C:\my-files\sqltool.rc web C:\my-files\hello.sql 'C: 处的严重 SQL 错误: \my-files\hello.sql' 第 2 行:“.ALTER CATALOG PUBLIC RENAME TO SOMENAME”格式错误的数字常量:. org.hsqldb.cmdline.SqlTool$SqlToolException 用新的异常更新了我的问题(即在第一行添加“.”之后)。 最后添加空行后就可以工作了。但是现在我得到了不同的异常(用户缺少特权或找不到对象:SOMENAME org.hsqldb.cmdline.SqlTool$SqlToolException)。我会在不同的帖子中询问。以上是关于通过 SQL 工具运行的 HSQLDB 存储过程抛出扫描仪错误的主要内容,如果未能解决你的问题,请参考以下文章
HSQLDB 在 Windows 上运行,但在 Linux 上抛出异常
Eclipse 和 HSQLDB: 将关系数据库服务器嵌入到 Eclipse 中,第 2 部分