MariaDB에서 프로시저를 등록하려고 하는데.. 어떤 오류인지 아시나요? 0 5 11,475

by DB초보 [MySQL] [2018.01.12 16:17:50]


명령의 1 행에서 시작하는 중 오류 발생 -
DELIMITER $$
오류 보고 -
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 $$' at line 1

명령의 2 행에서 시작하는 중 오류 발생 -
CREATE OR REPLACE PROCEDURE tt.FN_CHEDULE
(IN _USERID VARCHAR(20), IN _USERNAME VARCHAR(20), IN _CENTER_NM VARCHAR(50), OUT RESULT INT)
BEGIN
    DECLARE _CENTER_SEQ int(8) DEFAULT 0;
    DECLARE _CNT int DEFAULT 0;
    DECLARE i int DEFAULT 0;
    DECLARE _LOG_DATE varchar(8);

    /* 만약 SQL에러라면 ROLLBACK 처리한다. */
    DECLARE exit handler for SQLEXCEPTION
    BEGIN
        ROLLBACK;        
        SET RESULT = -1;  
    END;

    /* 트랜젝션 시작 */
    START TRANSACTION;

        /* 대상자 조회 쿼리 */
        select 
               b.CENTER_SEQ,       
               b.USER_ID, 
               b.USER_NM,
               b.USER_TYPE,               
               a.CENTER_NM
        into _CENTER_SEQ
        from center a left join (mgr b) on (a.CENTER_SEQ = b.CENTER_SEQ)
        where b.USER_ID = _USERID
        and b.USER_NM = _USERNAME
        and a.CENTER_NM = _CENTER_NM;  


        /* 대상자 스케줄 조회 쿼리 */
        select count(*) as cnt
        into _CNT
        from schedule
        where USER_ID = _USERID
        and CENTER_SEQ = _CENTER_SEQ
        and ymd like '2018%';


        IF _CNT > 0 then
            SET RESULT = -2;
            ROLLBACK;
        ELSE            
            WHILE i <= 45 DO
                SET _LOG_DATE = DATE_FORMAT(DATE_ADD(20180101, INTERVAL i DAY),'%Y%m%d');

                select 
                    _CENTER_SEQ as CENTER_SEQ,
                    _USERID as USER_ID,
                    _LOG_DATE AS YMD,
                    temp.ST_TIME,
                    temp.ED_TIME,
                    _USERID as REG_ID,    
                    DATE_FORMAT(now(),'%Y%m%d%H%i%S') as REG_DT    
                from (
                    select  '0900' AS ST_TIME, '1000' AS ED_TIME from dual
                    union all
                    select  '1000' AS ST_TIME, '1100' AS ED_TIME from dual
                    union all
                    select  '1100' AS ST_TIME, '1200' AS ED_TIME from dual
                    union all
                    select  '1200' AS ST_TIME, '1300' AS ED_TIME from dual
                    union all
                    select  '1300' AS ST_TIME, '1400' AS ED_TIME from dual
                    union all
                    select  '1400' AS ST_TIME, '1500' AS ED_TIME from dual
                    union all
                    select  '1500' AS ST_TIME, '1600' AS ED_TIME from dual
                    union all
                    select  '1600' AS ST_TIME, '1700' AS ED_TIME from dual
                    union all
                    select  '1700' AS ST_TIME, '1800' AS ED_TIME from dual
                ) temp;

                SET i = i + 1;
            END WHILE;

        END IF;


    COMMIT;
    SET RESULT = 0;
END$$
DELIMITER ;

오류 보고 -
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' at line 104

 

왜 오류인지를 모르겠는데.. 좀 알려주실분 안계신가요?

 

by 주킹 [2018.01.12 16:25:29]

END$$  <-- END; $$ 이리해야지 않나요


by DB초보 [2018.01.12 16:29:54]

END; $$ 변경후 실행해도

명령의 1 행에서 시작하는 중 오류 발생 -
DELIMITER $$
오류 보고 -
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 $$' at line 1

명령의 2 행에서 시작하는 중 오류 발생 -

오류 보고 -
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' at line 103

 

발생해요 ㅜㅜ


by DB초보 [2018.01.12 16:30:28]

10.1.18-MariaDB 버전정보입니다.


by DB초보 [2018.01.12 16:44:21]

자답입니다 DELIMITER 구문을 제거하니깐 정상적으로 컴파일 되네요

왜 그런지는 모르겠지만..


by 주킹 [2018.01.12 16:56:30]

밑단에 있는 딜리미터는 궂이 안써도 될듯하네요

해결하셨다니 다행이네여

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입