Saltar al contenido

Crear función a partir de un script SQL de Liquibase

Solución:

Creo que necesitas agregar el endDelimiter cláusula en la etiqueta Liquibase, basada en la documentación que se encuentra aquí

A continuación se muestra un ejemplo

<changeSet author="newbie" id="function_rad2deg" dbms="mysql,h2">
    <sqlFile encoding="utf8" 
             path="sql/function_rad2deg.sql" 
             relativeToChangelogFile="true"  
             splitStatements="false" 
             stripComments="false"
             endDelimiter="nGO"
    />
</changeSet>

Su archivo SQL con el delimitador anterior se vería así

DROP FUNCTION IF EXISTS rad2deg;
GO

CREATE FUNCTION rad2deg(rad DOUBLE)
RETURNS DOUBLE
BEGIN
    RETURN (rad * 180 / PI());
END
GO

Espero que esto ayude

Con el ejemplo anterior, hay dos problemas, uno es que no funcionará en h2 y el 2 es splitStatements debe ser cierto:

<changeSet author="me" id="01_functions_mysql" dbms="mysql">
    <sqlFile encoding="utf8" path="sql/01_functions.mysql.sql" 
    relativeToChangelogFile="true" 
    splitStatements="true" 
    stripComments="false" 
    endDelimiter="nGO" />
</changeSet>

y que algo como esto:

DROP FUNCTION IF EXISTS FIRST_DAY_THIS_MONTH;

GO

CREATE FUNCTION FIRST_DAY_THIS_MONTH (day date) 
RETURNS date
DETERMINISTIC
BEGIN 
  RETURN STR_TO_DATE  ( DATE_FORMAT    ( day,'%Y%m01' ),'%Y%m%d');
END

GO

Si está utilizando el archivo yaml, aquí está la configuración

changeSet:
  id: sqlFile-function
  author: sandeep
  logicalFilePath: baseFunctionScript
  changes:
  - sqlFile:
      dbms: mysql
      encoding: utf8
      endDelimiter: nGO
      path: my/path/baseScripts.sql
      splitStatements: true
      stripComments: false

Asegúrese de que stripComments sea falso, de lo contrario arrojará un error. Pasé 4 horas por eso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *