我正在使用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
同一脚本正在HSQLDB Swing UI中工作。
我尝试添加提交,但仍然无法正常工作。如果我从脚本中删除 catalogname.schemaname。(SOMENAME.SOMESCHEMA。),则效果很好
另外,我不明白一件事。
如果我在Swing UI中执行以下命令,则该命令第一次将运行良好,但是如果第二次执行,则会出现以下异常
用户缺少特权或找不到对象:PUBLIC /错误代码:-5501 /状态:42501
ALTER CATALOG PUBLIC RENAME TO SOMENAME;
它确认目录已重命名。但是,如果我一次又一次使用sqltool运行相同的脚本,它将永远不会引发相同的异常。如何使其从sqltool运行(即从.sql脚本导入后)
答案 0 :(得分:1)
不可能“同一脚本正在HSQLDB Swing UI中工作。”
我将确切的脚本加载到了HSQLDB Swing UI v 2.4.1中,但由于“脚本中包含SqlTool特定的语法”,因此失败,出现“未知令牌:/错误代码:-5582 /状态:42582”。
如果我删除了Sql-Tool特定的语法,则Swing UI会报告“用户缺少特权或找不到对象:SOMENAME /错误代码:-5501 /状态:42501”。
Fred T.可以确切解释原因,但是这些命令显然必须在两个事务中进行,并且我可以通过只执行一次“ CREATE SCHEMA”之前的所有操作来使其在Swing UI中工作;然后其余的在另一个执行。我怀疑您实际上是在编辑脚本(未运行“同一脚本”),然后使用较旧版本的HyperSQL Swing UI执行该脚本,在该版本中它未在单个事务中执行所有命令。
SqlTool没有此限制,它允许您精确控制在哪个事务中处理哪些命令。只需在自己的事务中允许所有命令(不需要COMMIT)(这是默认行为)即可。然后就可以了。
提示:
总之,这可以通过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
.;