Portál AbcLinuxu, 14. května 2025 05:20

Dotaz: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů

30.5.2011 23:27 plag.petr
Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
Přečteno: 541×
Odpovědět | Admin
Dobrý večer. Řeším problém omezenosti procedur v mysql na přesně stanovený počet parametrů. Potřeboval bych proceduře předhodit najednou N parametrů, kde N je náhodný počet. Něco jako
CALL zkontrolujSloupce('sloupec1', 'sloupec3');
CALL zkontrolujSloupce('sloupec2');
apod. variabilní počet parametrů
Jak se tohle dá vyřešit?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

okbob avatar 31.5.2011 06:25 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud je mi známo, tak to nelze. Procedury v MySQL nepodporují přetížení - můžete si hrát jedině s řetězcem hodnot - emulujete pole, nebo s dočasnou tabulkou.
2.6.2011 11:00 Ivan
Rozbalit Rozbalit vše Re: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hmm a co takhle definovat si datovy typ "TABLE OF VARCHAR" a predat procedure referenci na tabulku(seznam)?

Teda pokud MySQL neco takovyho umi.
okbob avatar 2.6.2011 11:30 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
kolekce MySQL rozhodne neumi
2.6.2011 18:38 dush
Rozbalit Rozbalit vše Re: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Moc procedur jsem v MySQL nenapsal a uz je to davno, ale co zkusit nacapt ty parametry do nejake tabulky a pak nad tim udelat cyklus.
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")');
2.6.2011 18:49 wike | skóre: 19 | blog: experimental
Rozbalit Rozbalit vše Re: Jak propašovat mysql funkci/proceduře předem neznámý počet parametrů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bug #15975 (z roku 2005)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.