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 構文にエラーがあります。1行目の「DELIMITER $$ DROP FUNCTION IF EXISTS replace_ci$$ CREATE FUNCTION」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

たとえばphpMyAdminでステートメントを直接実行すると成功しましたが。

この記事では、-tag を使用して storedprod を呼び出す方法のみを示して<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=trueJDBC URLに追加することを忘れないでください: http://www.bennadel.com/blog/1542-MySQL-3-4-com-mysql-jdbc-Driver-And-allowMultiQueries-true.htm

于 2012-03-04T18:17:23.763 に答える