2011-11-04 19 views
5

Cách thực hiện yêu cầu ON UPDATE trong yêu cầu CREATE TABLE trong cơ sở dữ liệu H2.H2DB - tập lệnh SQL ON UPDATE trong yêu cầu TẠO TABLE

Bối cảnh:

Tôi đang sử dụng sql-maven-plugin (1.5) để tạo ra một bảng trong một cơ sở dữ liệu h2 trong dự án của tôi.

Nhưng khi tôi gọi kịch bản lệnh sql, tôi có một số org.h2.message.DbException.getJdbcSQLException.

kịch bản của tôi:

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

Trả lời

6

H2 không hỗ trợ "ON UPDATE". Nhưng tôi đoán bạn có thể sử dụng một computed column thay ?:

CREATE TABLE IF NOT EXISTS TEST(
    DATE timestamp AS CURRENT_TIMESTAMP 
); 
+0

ok, cảm ơn cho câu trả lời. Tôi sẽ xem xét điều này. – user1029346

+0

@Thomas Mueller thực hiện tác vụ này vào CẬP NHẬT hoặc chỉ trên CREATE? – igr

+0

Câu hỏi này khá cũ và giờ đây H2 hỗ trợ "ON UPDATE". Nhưng nếu bạn yêu cầu "IF EXISTS": điều này chỉ được hỗ trợ cho "CREATE". –

0

Thêm vào tập tin SQL của bạn:

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"; 

Tạo một lớp Java và thêm vào classpath thử nghiệm của bạn:

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())); 
    } 
} 
Các vấn đề liên quan