source

Mysql 오류 구분 기호: 줄 구분 기호에 오류가 있습니다.

lovecheck 2023. 8. 30. 21:48
반응형

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

반응형