【问题标题】:Creating a stored procedure in MySQL5 with ColdFusion 9's <CFQUERY>-Tag使用 ColdFusion 9 的 <CFQUERY>-Tag 在 MySQL5 中创建存储过程
【发布时间】:2012-03-04 12:15:37
【问题描述】:

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

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

但首先我想通过 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 对应的手册 'DELIMITER $$ DROP FUNCTION IF EXISTS 附近使用正确语法的服务器版本 replace_ci$$ CREATE FUNCTION' 在第 1 行

虽然直接在 e.g. 中执行语句phpMyAdmin 成功。

这个article 仅显示如何使用&lt;cfstoredproc&gt;-tag 调用存储产品,但我看不到这些过程在哪里声明到数据库服务器。

【问题讨论】:

    标签: mysql stored-procedures coldfusion cfquery


    【解决方案1】:

    也许您正在使这变得更复杂,因为它应该是。我发现以下讨论表明,您不需要 DELIMIER 关键字:http://forums.mysql.com/read.php?39,130834,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2013-06-09
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多