Portál AbcLinuxu, 14. května 2025 05:20
CALL zkontrolujSloupce('sloupec1', 'sloupec3'); CALL zkontrolujSloupce('sloupec2'); apod. variabilní počet parametrůJak se tohle dá vyřešit?
DELIMITER $$ CREATE PROCEDURE `test`.`zkontrolujSloupce`(sloupce varchar(255)) BEGIN DECLARE done BOOLEAN DEFAULT FALSE; DECLARE current_column varchar(100) DEFAULT ''; DECLARE loopTable varchar(100) DEFAULT 'sloupce_tmp'; DECLARE ColumnCursor CURSOR FOR SELECT nazev FROM sloupce_tmp; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; SET @createQuery = concat('CREATE TEMPORARY TABLE IF NOT EXISTS ',loopTable,' (nazev varchar(255))'); PREPARE createStmt FROM @createQuery; EXECUTE createStmt; SET @insertQuery = concat('insert into ',loopTable,' values ', sloupce); PREPARE insertStmt FROM @insertQuery; EXECUTE insertStmt; DEALLOCATE PREPARE createStmt; DEALLOCATE PREPARE insertStmt; OPEN ColumnCursor; column_loop: LOOP FETCH ColumnCursor INTO current_column; IF `done` THEN SET done=FALSE; close ColumnCursor; LEAVE column_loop; END IF; #kontrola sloupce current_column #.... END LOOP column_loop; SET @dropQuery = concat('drop table ',loopTable); PREPARE dropStmt FROM @dropQuery; EXECUTE dropStmt; DEALLOCATE PREPARE dropStmt; ENDA pak to volat nejak takto
call test.zkontrolujSloupce('("sloupec1"),("sloupec2")');
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.