no, tak uz som doma a overil som si to
a funguje to
takze postup nasledovny:
vytvoris si premennu, do ktorej si nasackujes nazov tabulky (podla tvojho vzoru RRRR_MM).
napriklad _TABULKA = '2010_04' alebo zavinacova premenna @TABULKA = '2010_04' to je jedno
potom si vytvoris "zavinacovu premennu", do ktorej vlozis constantny string select a zan das nazov tabulky.
-- poznamka, zavinacove premenne nemusis deklarovat
SET @STM = CONCAT('SELECT * FROM ', @TABULKA);
a potom uz len samotny prepare
PREPARE STM1 FROM @STM;
EXECUTE STM1;
DEALLOCATE PREPARE STM1;
funkcnost overena v mojej konzole na mysql verzie 5.1
vid vypis:
mysql> set @tabulka = 'WORK';
Query OK, 0 rows affected (0.00 sec)
mysql> set @stm = concat('SELECT * FROM ', @tabulka);
Query OK, 0 rows affected (0.01 sec)
mysql> prepare STM1 FROM @stm;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute STM1;
+-------+-------+------------+------+---------------------+----------+---------------------+----------+
| MWOID | MCUID | DATUM | HOUR | CREADATE | CREAUSER | CHNGDATE | CHNGUSER |
+-------+-------+------------+------+---------------------+----------+---------------------+----------+
| 1 | 1 | 2009-09-02 | 2.00 | 2009-09-02 22:32:49 | admin | 2009-09-02 22:32:49 | admin |
| 3 | 1 | 2009-10-13 | 4.00 | 2009-10-13 23:19:32 | admin | 2009-10-13 23:19:32 | admin |
+-------+-------+------------+------+---------------------+----------+---------------------+----------+
2 rows in set (0.05 sec)
mysql> deallocate PREPARE STM1;
Query OK, 0 rows affected (0.00 sec)
ja som to sice pouzil len takto na rychlo v konzole, je ale mozne vytvorit aj proceduru a taktiez v nej mozes vyuzivat premenne so zavinacom.
vid priklad jednej mojej jednoduchsej procedury
CREATE PROCEDURE SARZ_C (IN _MSZID INT, IN _USER VARCHAR(50), IN _PPAL INT, IN _MMHID INT)
BEGIN
DECLARE _TYP CHAR(2);
DECLARE _DATUM DATE;
SELECT TYP, DATUM INTO _TYP, _DATUM FROM MADH WHERE MMHID = _MMHID;
SET @STR = _PPAL;
SET @MSZID = _MSZID;
SET @USERL = _USER;
SET @MMHID = _MMHID;
SET @DATUM = _DATUM;
IF _TYP = 'PR' THEN
WHILE _PPAL > 0 DO
INSERT INTO SARZ (MSZID, DPRJ, MHPRJ, CREADATE, CREAUSER, CHNGDATE, CHNGUSER)
SELECT _MSZID, _DATUM, _MMHID, NOW(), _USER, NOW(), _USER;
SET _PPAL = _PPAL - 1;
END WHILE;
ELSEIF _TYP = 'VY' THEN
SET @STM = 'UPDATE SARZ SET DVYD = ?, CHNGDATE = NOW(), CHNGUSER = ?, MHVYD = ? WHERE DPRJ <= ? AND MSZID = ? AND COALESCE(MHVYD, 0) = 0 LIMIT ?';
PREPARE STMT1 FROM @STM;
EXECUTE STMT1 USING @DATUM, @USERL, @MMHID, @DATUM, @MSZID, @STR;
DEALLOCATE PREPARE STMT1;
END IF;
END;