Spring Boot 液体基前提条件:如何检查数据行是否为正确的资料类型?

mm9b1k5b  于 2022-11-05  发布在  Spring
关注(0)|答案(3)|浏览(131)

我有一个数据库升级脚本来更改一些列上的数据类型。我想做一个preCondition检查,并且只在ALTER TABLE是DECIMAL数据类型时才调用它,但我想将它更改为INTEGER。
找不到这个的预先定义先决条件,而且也无法写入sqlCheck

3z6pesqy

3z6pesqy1#

liquibase中列的dataType没有内置的precondition。您可以只检查该列是否存在。如果它已经是您需要的数据类型,则不会抛出错误。

你可以在你的前提条件中使用sqlCheck,它将是这样的:

<preConditions onFail="MARK_RAN">
    <not>
        <sqlCheck expectedResult="DECIMAL">
            SELECT DATA_TYPE
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'your_table_name'
            AND COLUMN_NAME = 'your_column_name'
        </sqlCheck>
    </not>
</preConditions>
3z6pesqy

3z6pesqy2#

另一个答案已经提到了如何进行sqlcheck。然而,Teradata的实际SQL将是不同的。
在Teradata中,您将使用类似于以下内容的查询,并期望将columnType ='D '用于十进制值

Select ColumnType 
From DBC.ColumnsV 
Where databasename='yourdatabasename' 
and tablename='yourtablename' 
and columnname='yourcolumnname';

如果您希望使用更易于阅读的列类型而不是类型代码,也可以这样做:

Select Type(tablename.columnname);
bq3bfh9z

bq3bfh9z3#

我知道问题是针对Teradata的,但原则是相同的。
我更喜欢SQL文件,所以在变更日志中我有(对于Oracle),是:

<include file="roles.sql" relativeToChangelogFile="true" />

然后在roles.sql

--changeset betlista:2022-01-04_2200-87-insert
--preconditions onFail:MARK_RAN
--precondition-sql-check expectedResult:0 select count(*) from ddh_audit.DDH_USER_ROLE where id = 87;
insert into ddh_audit.DDH_USER_ROLE(id, role_name, description)
values(87, 'CONTAINERS_READONLY', 'Can read Containers reference data');

大卫添加的查询就可以解决这个问题。
我不知道,我也没有尝试过条件是否可以在多行上,我知道--rollback可以。

相关问题