2

<cfquery>我想知道是否可以通过 ColdFusion 的-tag在 MySQL5 中创建存储过程。我以前从未对存储过程做过任何事情......

我试图设置一个替换 MySQL 的函数,REPLACE但不区分大小写。我想使用这里提供的功能。

但首先我想通过 Coldfusion 创建这个函数,比如:

<CFQUERY datasource="#dsn#">
    DELIMITER $$

    DROP FUNCTION IF EXISTS `replace_ci`$$
    CREATE FUNCTION `replace_ci` ( str TEXT,needle CHAR(255),str_rep CHAR(255))
    RETURNS TEXT
    DETERMINISTIC
    BEGIN
    DECLARE return_str TEXT;
    SELECT replace(lower(str),lower(needle),str_rep) INTO return_str;
    RETURN return_str;
    END$$

    DELIMITER ;
</CFQUERY>

这会引发以下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以 replace_ci在第 1 行的 'DELIMITER $$ DROP FUNCTION IF EXISTS $$ CREATE FUNCTION'附近使用正确的语法

虽然直接在例如 phpMyAdmin 中执行语句成功。

本文仅显示如何使用 -tag 调用存储产品,<cfstoredproc>我看不到这些过程在哪里声明到数据库服务器。

4

1 回答 1

4

也许您正在使这变得更加复杂。我发现以下讨论说明,您不需要DELIMIER关键字:http ://forums.mysql.com/read.php?39,130​​834,248556#msg-248556

<CFQUERY datasource="mysql_jdbc">
    DROP FUNCTION IF EXISTS `replace_ci`;

    CREATE FUNCTION `replace_ci` ( str TEXT,needle CHAR(255),str_rep CHAR(255))
        RETURNS TEXT
         DETERMINISTIC
        BEGIN
        DECLARE return_str TEXT;
        SELECT replace(lower(str),lower(needle),str_rep) INTO return_str;
        RETURN return_str;
     END
</CFQUERY>

不要忘记添加allowMultiQueries=true到您的 JDBC URL:http ://www.bennadel.com/blog/1542-MySQL-3-4-com-mysql-jdbc-Driver-And-allowMultiQueries-true.htm

于 2012-03-04T18:17:23.763 回答