Spring boot 忽略\u dupkey\u索引上的\u行\u不使用spring boot
我正试图在SpringBoot应用程序中按照下面的代码运行schema.sql和data.sql文件。但是,它仍然失败,出现了唯一的约束冲突异常 有没有其他方法可以避免违反独特的合同? 或者如何解决这个问题?Spring boot 忽略\u dupkey\u索引上的\u行\u不使用spring boot,spring-boot,oracle11g,spring-data,oracle-sqldeveloper,spring-jdbc,Spring Boot,Oracle11g,Spring Data,Oracle Sqldeveloper,Spring Jdbc,我正试图在SpringBoot应用程序中按照下面的代码运行schema.sql和data.sql文件。但是,它仍然失败,出现了唯一的约束冲突异常 有没有其他方法可以避免违反独特的合同? 或者如何解决这个问题? @Configuration public class DataInitializerConfig { @Autowired @Qualifier("Datasource") private DataSource datasource;
@Configuration
public class DataInitializerConfig {
@Autowired
@Qualifier("Datasource")
private DataSource datasource;
@Bean
public DataSourceInitializer dataSourceInitializer() {
Resource initSchema = new ClassPathResource("schema.sql");
Resource initData = new ClassPathResource("data.sql");
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(initSchema, initData);
databasePopulator.setIgnoreFailedDrops(true);
databasePopulator.setSeparator("**END OF FILE**");
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(datasource);
dataSourceInitializer.setDatabasePopulator(databasePopulator);
return dataSourceInitializer;
}
}
schema.sql和data.sql脚本似乎很好,因为在这里运行时我看不到任何错误
data.sql如下所示:
DECLARE id varchar(20);
BEGIN
select dbms_random.string('x',10) into id from dual;
INSERT /*+ ignore_row_on_dupkey_index(TABLE1, PK_A) */ INTO TABLE1 (A,B,C,D,E,F,G,H,I,J,K)
select
id ,
dbms_random.string('x',255) ,
dbms_random.string('x',255) ,
dbms_random.string('x',10) ,
dbms_random.string('x',5) ,
sysdate + DBMS_RANDOM.value(0,86400)/86400 * 30 ,
sysdate + DBMS_RANDOM.value(0,86400)/86400 * 30 ,
sysdate + DBMS_RANDOM.value(0,86400)/86400 * 30 ,
dbms_random.string('x',50),
decode(round(dbms_random.value), 1, 'Y', 'N'),
decode(round(dbms_random.value), 1, 'Y', 'N')
FROM DUAL
connect by level <=10;
INSERT INTO TABLE2 (A,L,M,N)
select
id ,
trunc(dbms_random.value(0.01, 9999.99),2) ,
sysdate + DBMS_RANDOM.value(0,86400)/86400 * 30 ,
decode(round(dbms_random.value), 1, 'Y', 'N')
FROM DUAL
connect by level <=10;
END;
**END OF FILE**
begin
for rec in (select table_name
from all_tables
where table_name IN ('TABLE1','TABLE2')
)
loop
execute immediate 'drop table '||rec.table_name;
end loop;
Execute Immediate 'CREATE TABLE TABLE1 (A VARCHAR(10) NOT NULL, B VARCHAR(255), C VARCHAR(255),
D VARCHAR(10), E VARCHAR(5), F TIMESTAMP, G TIMESTAMP, H TIMESTAMP,
I VARCHAR(50), J VARCHAR(1), K VARCHAR(1),CONSTRAINT PK_A PRIMARY KEY (A))';
Execute Immediate 'CREATE TABLE TABLE2 (A VARCHAR(10), L DECIMAL, M TIMESTAMP, N VARCHAR(1))';
end;
**END OF FILE**