[英]Issue while USING INDEX ENABLE in Oracle while executing sql query
使用 Liquibase 变更集运行 Spring 引导应用程序
下面是我的主 xml 变更集:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
<include file="db/changelog/db.changelog-quartz.sql"/>
</databaseChangeLog>
以下是我的db/changelog/db.changelog-quartz.sql文件。
--liquibase formatted sql
--changeset quartz:quartz-init
ALTER TABLE QRTZ_LOCKS ADD PRIMARY KEY (SCHED_NAME, LOCK_NAME) USING INDEX ENABLE;
ALTER TABLE QRTZ_LOCKS MODIFY ("LOCK_NAME" NOT NULL ENABLE);
ALTER TABLE QRTZ_LOCKS MODIFY ("SCHED_NAME" NOT NULL ENABLE);
上面的查询在我手动运行时有效,但是当我通过集成测试用例运行它们时这些查询不起作用。
当我运行集成测试用例时,我遇到了错误
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "ALTER TABLE QRTZ_LOCKS ADD PRIMARY KEY (SCHED_NAME, LOCK_NAME) USING[*] INDEX ENABLE"; SQL statement:
ALTER TABLE QRTZ_LOCKS ADD PRIMARY KEY (SCHED_NAME, LOCK_NAME) USING INDEX ENABLE [42000-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
额外的信息:
jdbc 版本:com.oracle.database.Z84BEFFD3A0D49636A58CE6080CAA19.oj.dbc80CAA19.
以下是我的集成测试示例:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = TestApplication.class)
@TestPropertySource(locations = "classpath:application-scheduler-test.yml")
public class TelSecSchedulerComponentTestIT {
@Autowired
private BatchJobScheduler batchJobScheduler;
@Autowired
private Scheduler scheduler;
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void test() throws IOException, InvalidBatchJobStatusException, SchedulerException, InterruptedException {
}
下面是我的application-scheduler-test.yml文件
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE
quartz:
job-store-type: memory
jdbc:
initialize-schema: never
properties:
org:
quartz:
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
dataSource: myTestDB
dataSource:
myTestDB:
driver: org.h2.Driver
URL: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE
user: sa
password:
provider: hikaricp
validationQuery: select 1
jpa:
hibernate:
use-new-id-generator-mappings: false
ddl-auto: none
generate-ddl: true
database-platform: org.hibernate.dialect.H2Dialect
liquibase:
enabled: true
contexts: scheduler-test
change-log: classpath:/db/changelog/db.changelog-master.xml
我不确定查询中有什么语法错误。
有人可以帮忙吗?
两个潜在的原因是:
您正在“作为一个”处理 3 个命令,即尝试运行:
“ Alter表QRTZ_LOCKS使用index enable添加主键(sched_name,lock_name);
每个命令必须一次执行一个调用,而不是调用全部执行
您包括分号。 这是运行命令的 SQL Plus 指示器,而不是 SQL 本身的一部分。 在 JDBC 中,调用将是
ALTER TABLE QRTZ_LOCKS 添加主键(SCHED_NAME,LOCK_NAME)使用索引启用
不是
ALTER TABLE QRTZ_LOCKS ADD PRIMARY KEY (SCHED_NAME, LOCK_NAME) USING INDEX ENABLE;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.