sql >> データベース >  >> RDS >> Mysql

MySQL-ユーザー定義関数(UDF)の作成に関する問題

    ;を使用できるように、区切り文字を変更する必要があります 関数内:

    DELIMITER $$
    
    CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
    RETURNS VARCHAR(3000)
    DETERMINISTIC
    BEGIN
      DECLARE i INT DEFAULT 1;
      DECLARE v_char VARCHAR(1);
      DECLARE v_parseStr VARCHAR(3000) DEFAULT '';
    WHILE (i <= LENGTH(prm_strInput) )  DO
      SET v_char = SUBSTR(prm_strInput,i,1);
      IF v_char REGEXP '^[A-Za-z0-9]$' THEN
            SET v_parseStr = CONCAT(v_parseStr,v_char);  
      END IF;
      SET i = i + 1;
    END WHILE;
    RETURN trim(v_parseStr);
    END
    $$
    
    DELIMITER ;
    

    MySQLコマンドラインクライアント (および他の多くのSQLクライアント)デフォルトの区切り文字は;です。 。したがって、元のコードを入力すると、MySQLは最初のコマンドが最初の;で終了すると見なします。 が見つかりました(エラーメッセージに記載されているように5行目)。したがって、これは有効なSQLではないため、エラーが発生します。

    CREATE FUNCTION remove_non_alphanum (prm_strInput varchar(3000))
    RETURNS VARCHAR(3000)
    DETERMINISTIC
    BEGIN
      DECLARE i INT DEFAULT 1;
    

    区切り文字を他のものに変更すると、MySQLは完全なコマンドを識別します(CREATE FUNCTIONから) ENDへ そしてそれを実行します。ボイラ!関数が作成されます。最後に、関数を実行すると、関数本体はデフォルトの区切り文字を使用する複数のステートメントで構成されているため、コードは正常に実行されます。



    1. MySqlのデフォルト値に関数を使用できますか?

    2. .NETのMath.Maxのように2つの値を取るSQLServerのMax関数はありますか?

    3. PostgreSQLのようなデータベースよりもRabbitMQのようなメッセージブローカーが必要なのはなぜですか?

    4. データベースフォルダにコピーせずに、Androidのres /assetフォルダから読み取り専用データベースを開くことはできますか?