単純なMySQL関数を実行しようとすると、SQL構文エラーが発生します。これらはDb2で動作しています。私はMySQLでそれを実行したい。関数ケースとVARCHARのMySQL構文エラーの取得
CREATE FUNCTION SAMPLE1
(
I INTEGER
) RETURNS VARCHAR(4)
BEGIN
CASE
WHEN I < 256 THEN RETURN CAST(SUBSTR(HEX(I), 1, 2) AS VARCHAR(4));
WHEN I > 255 AND I < 4096 THEN RETURN CAST((SUBSTR(HEX(BITAND((I/256), 255)), 2, 1) || SUBSTR(HEX(BITAND(I, 255)), 1, 2)) AS VARCHAR(4));
ELSE
RETURN CAST((SUBSTR(HEX(BITAND((I/256), 255)), 1, 2) || SUBSTR(HEX(BITAND(I, 255)), 1, 2)) AS VARCHAR(4));
END CASE;
END;
とMySQL上で実行した後、私は
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 'VARCHAR(4));
WHEN I > 255 AND I < 4096 THEN RETURN CAST((SUBSTR(HEX(BITAND' at line 11
と次
CREATE FUNCTION SAMPLE2
(
PREFIX VARCHAR(43),
IP4 BIGINT,
VERSION INTEGER
) RETURNS VARCHAR(39)
BEGIN
RETURN UPPER(PREFIX ||
(CASE WHEN VERSION = 4 THEN
CAST (BITAND(((IP4 + 4294967296)/16777216), 255) AS VARCHAR(3)) || '.' ||
CAST (BITAND(((IP4 + 2147483648)/65536), 255) AS VARCHAR(3)) || '.' ||
CAST (BITAND(((IP4 + 2147483648)/256), 255) AS VARCHAR(3)) || '.' ||
CAST (BITAND((IP4 + 2147483648), 255) AS VARCHAR(3))
ELSE
SUPERHEX(BITAND(((IP4 + 4294967296)/65536), 65535)) || ':' ||
SUPERHEX(BITAND(IP4, 65535))
END));
END;
とエラー
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 'VARCHAR(3)) || '.' ||
CAST (BITAND(((IP4 + 2147483648)/65536), 255) AS ' at line 14
と最後のクエリ
を得るようなエラーを取得していますCREATE FUNCTION SAMPLE3
(
CONNECTED TIMESTAMP,
DISCONNECTED TIMESTAMP,
INTERVAL BIGINT
) RETURNS INTEGER
DETERMINISTIC
NO EXTERNAL ACTION
CONTAINS SQL
CALLED ON NULL INPUT
BEGIN ATOMIC
IF (CONNECTED IS NULL) THEN
RETURN -1;
ELSEIF (DISCONNECTED IS NULL) THEN
RETURN CASE WHEN (INTERVAL = 0 OR CONNECTED + INTERVAL MINUTES > CURRENT TIMESTAMP) THEN 1 ELSE 0 END;
ELSE
RETURN CASE WHEN (INTERVAL = 0 OR CONNECTED + INTERVAL MINUTES > CURRENT TIMESTAMP) AND CONNECTED > DISCONNECTED THEN 1 ELSE 0 END;
END IF;
END;
エラーになっ
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 'INTERVAL BIGINT
) RETURNS INTEGER
DETERMINISTIC
NO EXTERNAL ACTION
CONTA' at line 9
VARCHAR
は、MySQLCAST
機能で使用されていませんか?- 区間
BIGINT
,とCASE WHEN THEN ELSE END
はmysqlクエリでは異なりますか?
提案や解決策はありますか?
だから、関数を作成するために "あなたのMySQLサーバーのバージョンに対応するマニュアルを正しい構文でチェックしましたか"でしたか? – mustaccio