Newsgroup: it.comp.software.database
Titolo: [MYSQL] parametrizzare i nomo tabella

ho un database composto da semplici tabelle tab1, tab2, tab3......
di eguale struttura (5 campi numerici).
le query da usare diciamo possono essere del tipo SELECT * FROM tbl1 WHERE 
n1=500 and n3=78
Mi chiedo: volendo usare delle stored procedure ed avendo 20 tabelle
dovrei scrivere 20 stored procedure del tipo
 SELECT * FROM tbl1 WHERE n1=@num1 and n3=@num2
 ..........................
 ...........................
 SELECT * FROM tbl20 WHERE n1=@num1 and n3=@num2
 Il mio problema è questo:
 mentre num1, num2 sono parametrizzabili non lo è  il nome della tabella.
 da qui nasce che devo riscrivere 20 volte la stored procedure.
 esiste un altro metodo o devo ricorrere all sql iniection
 grazie gianmarco 

  grazie gianmarco
Non so che db utilizzi, ma si può:
- Creare una vista con un campo in più che contenga il nome della
tabella.
- Fare più complessa l'unica stored che vada sulla tabella giusta con
dei case o con delle if.
- Normalizzare un po' il db...
Ciao,
Lucazeo

nicoletta ha scritto:

Non conosco le SP di MySql ma (se ti è di aiuto)  in Firebird c'e' la 
clausola "execute statement" praticamente ti esegue una stringa come 
fosse una query detto ciò' ti basta costruire la stringa da eseguire: 
(ti parlo di firebird)
   While (i<21) do
   begin
     for execute statement 'select Campo1 from ' || 'tbl'|| :i into 
:Campo1 do
     begin
       a='Pippo';
     end
     i=i+1;
   end
-- 
Ibis et redibis non morietur in bellum.

 una query detto ciň' ti basta costruire la stringa da eseguire:
 ma se devo costruirmi la stringa tanto vale che usi  la programmazione.
ciao 

case o con delle if.
non saprei che strada prendere, puoi farmi un abbozzo??  te ne sarei grato
table1  ha solamente n1 int, n2 int, n3 int, n4 int, n5 int
table2  ha solamente n1 int, n2 int, n3 int, n4 int, n5 int
table3  ha solamente n1 int, n2 int, n3 int, n4 int, n5 int
e cosě via per le altre tabelle

 
Dipende, se sono elaborazioni di statistiche o simili a volte preferisco 
fare una select direttamente di una store proc passando i parametri e 
lasciare il calcolo al DBMS (altrimenti cosa fa  ??? :) ) io mi prendo 
solo i dati in ritorno.
Invece se sono delle semplici select per la modifica dei dati allora 
costruisco le query "lato client"
Saluti Goblin


Eccoti una semplice SP per farlo.
Vedi esempio.
mysql> create table t1(a int); create table t2(a int); create table
t3(a int);
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> insert into t2 values(4),(5),(6);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> insert into t3 values(7),(8),(9);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> delimiter //
mysql> create procedure esegui(tabella text)
    -> begin
    -> set @qqq=CONCAT('select * from ',tabella);
    -> prepare stm from @qqq;
    -> execute stm;
    -> end;
    -> //
Query OK, 0 rows affected (0.00 sec)
mysql> call esegui('t1');
+------+
| a    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> call esegui('t2');
+------+
| a    |
+------+
|    4 |
|    5 |
|    6 |
+------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> call esegui('t3');
+------+
| a    |
+------+
|    7 |
|    8 |
|    9 |
+------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)


ricordati di fare un
mysql> DELIMITER ;
ciao