sql - 为什么即使手动运行代码 MariaDB 也会引发语法错误?

标签 sql docker mariadb

我有一个 Dockerfile,它将目录中的所有文件复制到 /docker-entrypoint-initdb.d 目录中。除以下文件外,所有文件都完美初始化:

CREATE OR REPLACE PROCEDURE filterRentalStationByString (
    IN str VARCHAR(255),
    IN cnt INT
)
BEGIN

    SELECT
        r.id,
        r.rental_station_name,
        r.language_id,
        r.address,
        a.street,
        a.city,
        a.house_number,
        a.zip_code

    FROM
        rental_stations r
        INNER JOIN addresses a ON r.address = a.id

    WHERE
        MATCH( zip_code, city, street, house_number ) AGAINST ( str )
        OR
        LOWER( CONCAT( rental_station_name, street, city, house_number, zip_code ) ) LIKE LOWER( CONCAT( '%', str, '%' ) )

    LIMIT
        cnt;

END

当我从 Intellij 运行代码时,一切正常,但是当我尝试使用 docker-compose 启动和设置数据库时,我收到此错误消息:

db-mariadb-1 | 2022-10-22 08:13:02+00:00 [注意] [入口点]:/usr/local/bin/docker-entrypoint.sh: running/docker-entrypoint-initdb.d/03_stored_procedure.sql

db-mariadb-1 |第 1 行的错误 1064 (42000):您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在第 13 行的 '' 附近使用的正确语法

最佳答案

解决了这个问题,我在create语句前加了一个DELIMITER。

关于sql - 为什么即使手动运行代码 MariaDB 也会引发语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74162051/

相关文章:

sql - 如何使用 SQL 列出所有 postgres 规则?

sql - 将具有多个多对多关系的模式重构为语义不同但结构相似的实体?

.net - 如何在.NET中确定运行时的SQL Server存储过程参数?

docker - 如何通过主机名访问 docker 容器?(来 self 的主机)

mysql - 复制问题

Docker 没有使用 Dockerfile 将用户添加到 MariaDB

mysql - 如何借助 MariaDB 中选定的行来更新列值?

sql - SQLite:从有限的行集中选择MIN

Docker Alpine 镜像 + grpc : Warning: insecure environment read function 'getenv' used

docker - 运行Docker镜像时,控制台上未显示docker build-arg值