sourcecode

마리아드 10.3.29 시작...END 문이 DELECT와 함께 작동하지 않습니다.

copyscript 2023. 7. 8. 11:05
반응형

마리아드 10.3.29 시작...END 문이 DELECT와 함께 작동하지 않습니다.

다음 문장을 Mariadb 10.3.29와 10.3.13에서 실행하는 데 문제가 있습니다.

delimiter |
BEGIN NOT ATOMIC
    DECLARE finished int default 0;
    DECLARE query varchar(500) default "";
    
    DECLARE curQuery
        CURSOR FOR
            SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA ,'.', table_name, ' MODIFY COLUMN `type` tinyint(1) DEFAULT NULL NULL COMMENT "test";') 
            FROM information_schema.tables WHERE table_name = 'test_table';
        
        
    DECLARE CONTINUE HANDLER
        FOR NOT FOUND SET finished = 1;
    
    open curQuery;
    
    executeQuery: LOOP
        FETCH curQuery INTO query;
        IF finished = 1 THEN
            LEAVE executeQuery;
        END IF;
        prepare stmt from query;
        execute stmt;
    END LOOP executeQuery;
    CLOSE curQuery;
END|

다음 오류가 발생합니다.

이유:

SQL Error [1064] [42000]: (conn=54) 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 'DECLARE finished int default 0;

dbeaver 21.3.3 사용

여기 있는 문서들에 따르면: https://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/ 에 따르면, 저는 mariadb 10.1.1+의 "스캐너 프로그램" 밖에서 이것을 할 수 있어야 합니다.그러나 저장 프로시저 내에서 실행할 수 있지만 가능하면 일반 SQL에서 실행하고 싶습니다.

잘 부탁드립니다.

필요한 것 같습니다.BEGIN NOT ATOMIC명시적으로, 이것이 예제가 보여주는 것입니다.

만지작거리다

https://mariadb.com/kb/en/begin-end/ :

NOT ATOMIC저장 프로시저 외부에서 사용할 경우 필요합니다.저장 프로시저 내부 또는 익명 블록 내에서 BEGIN 단독으로 새로운 익명 블록을 시작합니다.

언급URL : https://stackoverflow.com/questions/70947069/mariadb-10-3-29-begin-end-statement-not-working-with-declare

반응형