executeSqlScript 因 Spring for PL/SQL 块而失败
executeSqlScript fails with Spring for PL/SQL block
我正在尝试使用 AbstractTransactionalJUnit4SpringContextTests
中的内置函数 executeSqlScript
使用以下外部 SQL 文件填充我的数据库。
declare
id number;
begin
insert into table1 (field1) values ('V1') returning account__id into id;
insert into table2 (my_id, field2) VALUES (id, 'Value3');
end;
但是我收到以下错误。我不确定我允许在 SQL 文件中做什么 我想使用 executeSqlScript
.
执行
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 1 of resource class path resource [testdata.sql]: declare id number; nested exception is java.sql.SQLException: ORA-06550: line 1, column 17:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
Caused by: java.sql.SQLException: ORA-06550: line 1, column 17:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
所以我的问题是:
我可以在 executeSqlScript
的 SQL 文件中表达什么?
正在接收错误的原因是什么?
您似乎正试图在脚本中使用 PL/SQL 的功能。
AbstractTransactionalJUnit4SpringContextTests
中的executeSqlScript(..)
方法在幕后内部委托给ScriptUtils.executeSqlScript(..)
,ScriptUtils
只支持纯SQL脚本。
因此您可能需要切换到简单的 SQL 语句并找到一种不同的机制来从 table1
.
中检索 account__id
的值
另一个选项(我 未 尝试过)是将语句分隔符更改为 ";"
以外的其他选项(例如 "end;"
),但你不能通过 AbstractTransactionalJUnit4SpringContextTests.executeSqlScript
做到这一点。相反,您需要调用 ScriptUtils.executeSqlScript(..)
或(最好)使用 ResourceDatabasePopulator
.
我正在尝试使用 AbstractTransactionalJUnit4SpringContextTests
中的内置函数 executeSqlScript
使用以下外部 SQL 文件填充我的数据库。
declare
id number;
begin
insert into table1 (field1) values ('V1') returning account__id into id;
insert into table2 (my_id, field2) VALUES (id, 'Value3');
end;
但是我收到以下错误。我不确定我允许在 SQL 文件中做什么 我想使用 executeSqlScript
.
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement at line 1 of resource class path resource [testdata.sql]: declare id number; nested exception is java.sql.SQLException: ORA-06550: line 1, column 17:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
Caused by: java.sql.SQLException: ORA-06550: line 1, column 17:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
:= . ( @ % ; not null range default character
所以我的问题是:
我可以在 executeSqlScript
的 SQL 文件中表达什么?
正在接收错误的原因是什么?
您似乎正试图在脚本中使用 PL/SQL 的功能。
AbstractTransactionalJUnit4SpringContextTests
中的executeSqlScript(..)
方法在幕后内部委托给ScriptUtils.executeSqlScript(..)
,ScriptUtils
只支持纯SQL脚本。
因此您可能需要切换到简单的 SQL 语句并找到一种不同的机制来从 table1
.
account__id
的值
另一个选项(我 未 尝试过)是将语句分隔符更改为 ";"
以外的其他选项(例如 "end;"
),但你不能通过 AbstractTransactionalJUnit4SpringContextTests.executeSqlScript
做到这一点。相反,您需要调用 ScriptUtils.executeSqlScript(..)
或(最好)使用 ResourceDatabasePopulator
.