質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

3回答

8483閲覧

mysql のストアドファンクションがエラーになる

yggd0114

総合スコア91

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2019/07/03 04:43

サーバー移行した際にmysql(MariaDB)のバージョンが変わり、前に登録できたストアドファンクションが
登録できなくなってしまいました。

旧環境 MariaDB 10.1.13
新環境 MySQL 5.7.16

sql

1CREATE FUNCTION kana2KANA(data TEXT) RETURNS TEXT DETERMINISTIC 2BEGIN 3 DECLARE kana1_len INT(2); 4 DECLARE kana2_len INT(2); 5 DECLARE kana1_h VARCHAR(61) DEFAULT 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッャュョァィゥェォー。「」、・'; 6 DECLARE kana1_z VARCHAR(61) DEFAULT 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッャュョァィゥェォー。「」、・'; 7 DECLARE kana2_h VARCHAR(52) DEFAULT 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ'; 8 DECLARE kana2_z VARCHAR(26) DEFAULT 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ'; 9 SET kana1_len = CHAR_LENGTH(kana1_h); 10 SET kana2_len = CHAR_LENGTH(kana2_h); 11 WHILE kana2_len > 0 DO 12 SET data = REPLACE(data,SUBSTRING(kana2_z,kana2_len,1), SUBSTRING(kana2_h,kana2_len*2-1,2) ); 13 SET kana2_len = kana2_len - 1; 14 END WHILE; 15 WHILE kana1_len > 0 DO 16 SET data = REPLACE(data, SUBSTRING(kana1_z,kana1_len,1), SUBSTRING(kana1_h,kana1_len,1)); 17 SET kana1_len = kana1_len - 1; 18 END WHILE; 19 RETURN data; 20END

エラーメッセージ
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3


こちらを登録するにはどのようにするのが良いでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

キャラクタセットはUTF-8でしょうか?
UTF-8では半角カタカナでも1文字3バイト以上なので、桁あふれを起こしているのでは?

投稿2019/07/03 04:54

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最初に
delimiter //
とかしておいて最後の END の後に
//
delimiter ;
とすると解決したりしませんかね?
文中のセミコロンで行が終端してしまうので文法的にまちがった所で区切られた状態になってしまっているのが原因だと思うので文の終端を「;」ではなく「//」だよと最初に切替え宣言しておいて一式終わった所で文の終端に来たよと教えるために「//」を記載してそれが終わったら本来の終端記号である「;」に戻す…という流れです。

投稿2019/07/03 04:53

HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yggd0114

2019/07/03 07:32

delimiterを入れましたが、 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter' at line 1 と表示されました。
guest

0

ベストアンサー

デリミタの調整してます?

SQL

1delimiter // 2CREATE FUNCTION kana2KANA(data TEXT) RETURNS TEXT DETERMINISTIC 3BEGIN 4 DECLARE kana1_len INT(2); 5 DECLARE kana2_len INT(2); 6 DECLARE kana1_h VARCHAR(61) DEFAULT 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッャュョァィゥェォー。「」、・'; 7 DECLARE kana1_z VARCHAR(61) DEFAULT 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンッャュョァィゥェォー。「」、・'; 8 DECLARE kana2_h VARCHAR(52) DEFAULT 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ'; 9 DECLARE kana2_z VARCHAR(26) DEFAULT 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ'; 10 SET kana1_len = CHAR_LENGTH(kana1_h); 11 SET kana2_len = CHAR_LENGTH(kana2_h); 12 WHILE kana2_len > 0 DO 13 SET data = REPLACE(data,SUBSTRING(kana2_z,kana2_len,1), SUBSTRING(kana2_h,kana2_len*2-1,2) ); 14 SET kana2_len = kana2_len - 1; 15 END WHILE; 16 WHILE kana1_len > 0 DO 17 SET data = REPLACE(data, SUBSTRING(kana1_z,kana1_len,1), SUBSTRING(kana1_h,kana1_len,1)); 18 SET kana1_len = kana1_len - 1; 19 END WHILE; 20 RETURN data; 21END 22// 23delimiter ; 24

test

以下テストでもエラーになりますか?

sql

1delimiter // 2select 1 as x; 3// 4delimiter ;

上記「//」の部分の含めmysql上でコピペしてください

参考

投稿2019/07/03 04:48

編集2019/07/03 07:42
yambejp

総合スコア114837

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yggd0114

2019/07/03 07:32

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter' at line 1 と表示されました。
yambejp

2019/07/03 07:48 編集

delimiterはコマンドなので実行できないのはなにか勘違いしている可能性も コマンドの入力は何をご利用ですか? mysqlクライアント(シェル)?それともphpMyAdmin的なもの?
yggd0114

2019/07/03 08:32

phpmyadminでした。 デリミタがデフォルトで設定していたので、そこの部分を除外したところ頂いたコードで登録できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問