반응형
Mysql 오류 구분 기호: 줄 구분 기호에 오류가 있습니다.
찾은 mysql 함수를 사용하려고 하는데 오류가 발생하는 것 같습니다.기능은 다음과 같습니다.
SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS digits;
DELIMITER $$
CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret CHAR(32) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END ;
UNTIL i > len END REPEAT;
RETURN ret;
END
$$
DELIMITER ;
SELECT digits('123ab45cde6789fg');
Mariadb 5.5를 사용하고 있습니다.
Server version: 5.5.50-MariaDB MariaDB Server
다음과 같은 오류가 표시됩니다.
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '$$
DELIMITER ;
저는 원래 파이프였던 구분 기호를 바꾸는 것과 같은 몇 가지 제안을 시도했습니다.다음에서 다음으로 구분 기호 이동END
하지만 제가 한 그 밑에는 오류가 둘 다 발생하는 것 같습니다.
오류를 수정하기 위해 기본적인 수정을 시도했지만 여전히 오류가 발생합니다. 이 섹션을 제거하면 더 이상 오류가 발생하지 않는 것처럼 보이지만 결과는 정확하지 않습니다.
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c BETWEEN '0' AND '9' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END ;
UNTIL i > len END REPEAT;
어떤 조언이든 좋습니다.
갱신하다
저는 몇 가지 다른 버전을 테스트해 보았지만 같은 문제가 있습니다.저는 현재 나비캣을 사용하고 있습니다.
Server version: 5.5.50-MariaDB MariaDB Server
Server version: 5.5.31-0ubuntu0.12.10.1 (Ubuntu)
Server version: 5.1.73 Source distribution
Server version: 5.5.52-MariaDB MariaDB Server
문제를 재현할 수 없습니다.
MariaDB [_]> SELECT VERSION();
+----------------+
| VERSION() |
+----------------+
| 5.5.56-MariaDB |
+----------------+
1 row in set (0.00 sec)
MariaDB [_]> SET GLOBAL log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> DROP FUNCTION IF EXISTS digits;
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> DELIMITER $$
MariaDB [_]> CREATE FUNCTION digits( str CHAR(32) )
-> RETURNS CHAR(32)
-> BEGIN
-> DECLARE i, len SMALLINT DEFAULT 1;
-> DECLARE ret CHAR(32) DEFAULT '';
-> DECLARE c CHAR(1);
-> SET len = CHAR_LENGTH( str );
-> REPEAT
-> BEGIN
-> SET c = MID( str, i, 1 );
-> IF c BETWEEN '0' AND '9' THEN
-> SET ret=CONCAT(ret,c);
-> END IF;
-> SET i = i + 1;
-> END;
-> UNTIL i > len END REPEAT;
-> RETURN ret;
-> END$$
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> DELIMITER ;
MariaDB [_]> SELECT digits('123ab45cde6789fg');
+----------------------------+
| digits('123ab45cde6789fg') |
+----------------------------+
| 123456789 |
+----------------------------+
1 row in set (0.00 sec)
언급URL : https://stackoverflow.com/questions/45106319/mysql-error-delimiter-error-at-line-delimiter
반응형
'source' 카테고리의 다른 글
배경 이미지 위의 반투명 컬러 레이어? (0) | 2023.08.30 |
---|---|
명령줄 스크립트를 통해 연결된 모든 장치의 장치 UUID를 어떻게 찾을 수 있습니까? (0) | 2023.08.30 |
offsetTop 대 jQuery.offset().top (0) | 2023.08.30 |
토요일과 일요일(및 공휴일)을 비활성화하기 위해 jQuery UI Datepicker를 만들 수 있습니까? (0) | 2023.08.30 |
ORACLE SQL 날짜 범위 교차점 (0) | 2023.08.30 |