通过 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 上抛出异常

Oracle中RAISE异常

Eclipse 和 HSQLDB: 将关系数据库服务器嵌入到 Eclipse 中,第 2 部分

从 SQL Server 函数向存储过程抛出异常

sql-maven-plugin 为 H2 存储过程定义抛出 SQL 语法错误

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号