У меня есть версия схемы базы данных Oracle для HSQL для выполнения модульных тестов.HSQL Trigger генерирует SQL-ошибку: -458, SQLState: S1000/java.lang.ArrayIndexOutOfBoundsException
Мне нужно обновить колонку при обновлении текущей меткой времени.
Триггер, который я внедрил, загружается без жалобы движком hsql, но он падает во время выполнения, когда я пытаюсь обновить строки.
Вот тестовый пример образец, который вы можете запустить в проекте сконфигурированный с пружиной и JUnit:
public class UtSqlTriggerTest {
@Test public void testTrigger() throws SQLException {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
resourceDatabasePopulator.addScript(new InMemoryResource(
"CREATE TABLE TEST (ID NUMERIC NOT NULL PRIMARY KEY,DATA VARCHAR(200), LAST_UPDATE TIMESTAMP);\n" +
"CREATE TRIGGER updTimestamp AFTER UPDATE OF DATA ON TEST\n" +
"REFERENCING NEW AS newrow OLD AS oldrow\n" +
"FOR EACH ROW\n" +
"SET newrow.LAST_UPDATE = current_timestamp;"));
Connection connection = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb;shutdown=true", "SA", "");
resourceDatabasePopulator.populate(connection);
JdbcTemplate tjdbc = new JdbcTemplate(new SingleConnectionDataSource(connection, true));
tjdbc.update("INSERT INTO TEST(ID, DATA) VALUES (0, 'HELLO')");
tjdbc.update("UPDATE TEST SET DATA = 'HELLO WORLD' WHERE ID = 0");
tjdbc.queryForObject("SELECT LAST_UPDATE FROM TEST WHERE ID = 0", Date.class);
}
}
Что с этим триггером? Почему это сгенерировало ArrayIndexOutOfBoundException?
CREATE TRIGGER updateDateAjoutFichier AFTER UPDATE OF DATA ON TEST
REFERENCING NEW AS newrow OLD AS oldrow
FOR EACH ROW
SET newrow.LAST_UPDATE = current_timestamp;