H2DB - скрипт SQL ON UPDATE в запросе CREATE TABLE - PullRequest
5 голосов
/ 04 ноября 2011

Как сделать ON UPDATE в запросе CREATE TABLE в базе данных H2.

Контекст:

Я использую sql-maven-plugin (1.5) для генерации таблицы в базе данных h2 в моем проекте.

Но когда я вызываю скрипт sql, у меня появляется org.h2.message.DbException.getJdbcSQLException.

Мой сценарий:

CREATE TABLE IF NOT EXISTS TEST(
  DATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);

Ответы [ 3 ]

6 голосов
/ 04 ноября 2011

H2 не поддерживает "ОБНОВЛЕНИЕ". Но я думаю, вы могли бы вместо этого использовать вычисляемый столбец ? * 1003

CREATE TABLE IF NOT EXISTS TEST(
  DATE timestamp AS CURRENT_TIMESTAMP
);
0 голосов
/ 12 марта 2019

H2 поддерживает «ON UPDATE», начиная с версии 1.4.197 (выпущена 18 марта 2018 г.) Запрос из вопроса должен работать просто отлично, так как этот работает в нашем проекте:

last_modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

Я нашел это благодаря комментариям:

H2DB - скрипт SQL ON UPDATE в запросе CREATE TABLE

H2DB - скрипт SQL ON UPDATE в запросе CREATE TABLE

Так что, пожалуйста, проголосуйте и за них.

0 голосов
/ 07 февраля 2018

Добавьте в свой файл SQL:

CREATE TABLE IF NOT EXISTS my_table (
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER my_trigger
  BEFORE UPDATE
  ON my_table
  FOR EACH ROW CALL "org.h2.trigger.UpdatedAtTrigger";

Создайте класс Java и добавьте в свой путь к тесту:

package org.h2.trigger;

import java.sql.*;  
import java.time.Instant;
import org.h2.tools.TriggerAdapter;

public class UpdatedAtTrigger extends TriggerAdapter {

  @Override
  public void fire(Connection conn, ResultSet oldRow, ResultSet newRow) throws SQLException {
    newRow.updateTimestamp("updated_at", Timestamp.from(Instant.now()));
  }
}
...