ПЕРЕИМЕНУЙТЕ КОЛОННУ, ЕСЛИ ЕСТЬ В H2 - PullRequest
0 голосов
/ 29 мая 2019

У меня есть файл сценария H2 sql, который выполняется при каждом обновлении приложения или когда база данных не была создана ранее.

Итак, все в файле скрипта зависит от проверки «ЕСЛИ НЕ СУЩЕСТВУЕТ» или «ЕСЛИ СУЩЕСТВУЕТ».

Из-за этого у меня проблема с созданием SQL для переименования столбцов, и я не могу найти способ сделать это, потому что если оператор переименования выполняется более одного раза, я получаю сообщение об отсутствии столбца.

Я пробовал следующее:

ALTER TABLE X RENAME COLUMN IF NOT EXISTS Y TO Z;

1 Ответ

0 голосов
/ 29 мая 2019

Я создал одну функцию для удовлетворения своих потребностей следующим образом.Если у вас другой подход, пожалуйста, дайте мне знать.ткс!

DROP ALIAS IF EXISTS RENAME_COLUMN_IF_EXISTS;
CREATE ALIAS RENAME_COLUMN_IF_EXISTS AS  $$
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@CODE
void renameColumnIfExists(final Connection conn, final String tableName, final String cOld, final String cNew) throws SQLException {
    StringBuffer sql = new StringBuffer();
    sql.append("SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?"); 

    PreparedStatement ps = conn.prepareStatement(sql.toString());

    try {
        ps.setString(1, tableName);
        ps.setString(2, cOld);

        ResultSet results = ps.executeQuery();

        if (results.next()) {
            if (results.getInt(1) > 0) {
                ps.close();

                sql = new StringBuffer()
                    .append("ALTER TABLE").append(" ")
                    .append(tableName).append(" ")
                    .append("RENAME COLUMN").append(" ")
                    .append(cOld).append(" ")
                    .append("TO").append(" ")
                    .append(cNew);
                ps = conn.prepareStatement(sql.toString());
                ps.executeUpdate();
            }
        }
    } finally {
        ps.close();
    }
}
$$;

CALL RENAME_COLUMN_IF_EXISTS ('X', 'Y', 'Z');
...