当前位置: 首页 > 知识库问答 >
问题:

HSQLDB SqlTool正在抛出用户缺少权限或找不到对象

程和煦
2023-03-14

我正在使用sqltool执行。sql脚本。它不停地说用户缺乏特权或找不到对象。同样的脚本在Swing UI中运行得很好。

我的脚本(hello.sql)

\.
SET DATABASE SQL SYNTAX ORA TRUE;
ALTER CATALOG PUBLIC RENAME TO SOMENAME;
COMMIT;
CREATE SCHEMA SOMESCHEMA;
COMMIT;
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
COMMIT;
.
:;
> java -jar sqltool-2.4.1.jar --autocommit --rcfile C:\\my-files\\hsqldb\\2.4.1\\dbmanager.rc web C:\\my-files\\hsqldb\\2.4.1\\hello.sql                                                              
Executing command from edit buffer:                                                                                                                                                                   
"SET DATABASE SQL SYNTAX ORA TRUE;                                                                                                                                                                    
ALTER CATALOG PUBLIC RENAME TO SOMENAME;                                                                                                                                                              
COMMIT;                                                                                                                                                                                               
CREATE SCHEMA SOMESCHEMA;                                                                                                                                                                             
COMMIT;                                                                                                                                                                                               
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                                                                                                                                                                                               
COMMIT;"                                                                                                                                                                                              

SEVERE  SQL Error at 'C:\my-files\hsqldb\2.4.1\hello.sql' line 14:                                                                                                                                    
"SET DATABASE SQL SYNTAX ORA TRUE;                                                                                                                                                                    
ALTER CATALOG PUBLIC RENAME TO SOMENAME;                                                                                                                                                              
COMMIT;                                                                                                                                                                                               
CREATE SCHEMA SOMESCHEMA;                                                                                                                                                                             
COMMIT;                                                                                                                                                                                               
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                                                                                                                                                                                               
COMMIT;"                                                                                                                                                                                              
user lacks privilege or object not found: SOMENAME                                                                                                                                                    
org.hsqldb.cmdline.SqlTool$SqlToolException 

还有,有一件事我不明白。

如果我在Swing UI中执行以下命令,它第一次工作正常,但如果我第二次执行,我会出现以下异常

用户缺乏权限或找不到对象:公共/错误代码:-5501/状态:42501

ALTER CATALOG PUBLIC RENAME TO SOMENAME;

它确认目录已重命名。但是,如果我一次又一次地使用sqltool运行相同的脚本,它永远不会抛出相同的异常。如何使其从sqltool中工作(即从.sql脚本导入后)

共有1个答案

段超
2023-03-14

不可能“相同的脚本在HSQLDB Swing UI中工作”。

我将确切的脚本加载到HSQLDB Swing UI V.2.4.1中,但正如我所料,它失败了,出现了“Unknown token:/Error code:-5582/state:42582”,因为脚本中有特定于SQLTool的语法。

如果删除特定于SQL工具的语法,那么Swing UI将报告“用户缺乏特权或对象未找到:SOMENAME/Error code:-5501/state:42501”。

Fred T可以确切地解释原因,但是这些命令显然必须在两个事务中,我可以通过在一次执行中执行“Create Schema”之前的所有内容来使其在Swing UI中工作;剩下的在另一次处决中。我怀疑您实际上编辑了脚本(没有运行“相同的脚本”),然后使用旧版本的HyperSQL Swing UI执行它,其中它没有在单个事务中执行所有命令。

SqlTool没有这种限制,它允许您准确地控制在哪个事务中执行哪些命令。只允许所有命令(提交是不必要的)在它们自己的事务中(这是默认行为)。然后它就起作用了。

小贴士:

  • 不需要提交,因为这些是DDL语句。
  • 可以执行。以“.;”结束事务。而不是分开“。和“:.”命令。
  • 你不需要\。因为SqlTool在看到“Create Procedure”开始命令时会自动知道您需要一个新的分组事务。如果它使代码更易读,可以在创建过程之前插入“.\”。

总之,这是通过SQLTool工作的:

SET DATABASE SQL SYNTAX ORA TRUE;
ALTER CATALOG PUBLIC RENAME TO SOMENAME;
CREATE SCHEMA SOMESCHEMA;

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
.;
 类似资料:
  • 所以我已经在谷歌和stack上搜索过了,我找到了一堆有同样错误的人,但是没有一个解决方案能解决我的问题。 我正在使用的: Java 8 JavaEE7 TomEE 7.0 M3 JPA 2.0 ORM 1.0 Postgres公司 我认为问题在于命名查询,也许还有ManyToMany关系。 User.java SystemRole.java 持久性.xml user-orm.xml context

  • 我遵循了以下基本的Spring批量教程https://spring.io/guides/gs/batch-processing/ . > 我正在使用IntelliJ 14并创建了一个Spring批处理项目 我在用Mavin。我还有pom。xml文件。 Mvn clean install运行良好,即使应用程序。java告诉我“无法自动连线。找不到JdbcTemplate类型的bean”@Autowi

  • 我在hsqldb测试中遇到了一点问题。 我在import.sql中添加了我需要的所有内容,它工作得很好。 我创建了一个类: 但是我得到了这个错误:

  • 我发现这个错误在整个互联网上出现了很多次,但我根本没有找到适合我的情况的解决方案。我有一个 HSQL 数据库 - 我已成功连接到数据库中的一个表。我继续在数据库中创建另一个表 - 根据需要修改完全相同的 Java 代码,但它带来了错误:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:USER。 我发现在我的文件存储脚本中,PRODUCT表创建的代码就在那

  • 我正在尝试做一些Ucanaccess实践,用Java管理一些数据库。我得到了一个我不知道如何解决的错误。 我在Access中有一个名为USERS的表: 自动编号,短文本,短文本,数字。 代码继续,但只有一些条件和查询。