我试图使用以下外部SQL文件使用executeSqlScript
中的内置函数AbstractTransactionalJUnit4SpringContextTests
填充数据库。
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;
但是即时通讯收到以下错误。我不确定我想使用
executeSqlScript
执行的SQL文件中允许执行的操作。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
所以我的问题是:
我可以在SQL文件中为
executeSqlScript
表示什么?接收错误的原因是什么?
最佳答案
看来您正在尝试在脚本中使用PL / SQL的功能。executeSqlScript(..)
中的AbstractTransactionalJUnit4SpringContextTests
方法内部委托给幕后的ScriptUtils.executeSqlScript(..)
,而ScriptUtils
仅支持纯SQL脚本。
因此,您可能需要切换到简单的SQL语句,并找到一种不同的机制来从account__id
检索table1
的值。
另一个选择(我没有尝试过)是将语句分隔符更改为";"
(例如,"end;"
)以外的其他内容,但是您不能通过AbstractTransactionalJUnit4SpringContextTests.executeSqlScript
来实现。相反,您需要调用ScriptUtils.executeSqlScript(..)
或(也许最好)使用ResourceDatabasePopulator
。
关于sql - executeSqlScript失败,Spring for PL/SQL块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30753901/