繁体   English   中英

在执行 sql 查询时在 Oracle 中使用 INDEX ENABLE 时出现问题

[英]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

我不确定查询中有什么语法错误

有人可以帮忙吗?

两个潜在的原因是:

  1. 您正在“作为一个”处理 3 个命令,即尝试运行:

    “ Alter表QRTZ_LOCKS使用index enable添加主键(sched_name,lock_name);

每个命令必须一次执行一个调用,而不是调用全部执行

  1. 您包括分号。 这是运行命令的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM