Portál AbcLinuxu, 10. listopadu 2025 05:41
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;
END
A pak to volat nejak takto
call test.zkontrolujSloupce('("sloupec1"),("sloupec2")');
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.