|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
[SQL] Funzioni
Salve,
volevo chiervi è possibile definire delle funzioni in SQL ( MySql) ad esempio ipotizziamo abbia banalmente un campo x in tab, io vorrei scrivere una funzione power che preso in ingresso x me ne faccia il quadrato select power( x ) from tab; ( l'esempio con power è per semplicità , ovviamente mi serve per task più complicati) E' possibile fare la cosa direttamente in SQL ?? grazie ! |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
|
![]() |
![]() |
![]() |
#3 | |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
Quote:
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12840
|
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
Ho guardato , ho capito come funzionano ma non riesco ad adattarle al mio scopo :-(
Con questo ad esempio mi mette nella variabile globale x la conversione in inch del primo valore di lunghezza, come faccio a farlo per tutta la colonna ?? Anche riuscendo a iterare la cosa, poi non so dove salvare i valori di conversione ! CREATE PROCEDURE converti (OUT rx INT) BEGIN DECLARE x INT; DECLARE sp1_cursor CURSOR FOR SELECT lunghezza FROM tab; OPEN sp1_cursor; FETCH sp1_cursor INTO x; CLOSE sp1_cursor; SET rx = x/2.2; END | Grazie per l'aiuto ! |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
Scusate mi sono dimenticato di diverlo comunque, ipotizziamo io abbia una tabella prova in cui vi è un campo lunghezza in cm.
Ora voglio convertire in inch con una store procedure; Ho pensato quindi di fare una tabella conversione con un campo lunghezza dove andare ad inserire il valore convertito. Nello specifico il codice sotto mi va in loop sul primo elemento T_T Codice:
create procedure conv() begin declare finito int default 0; declare x int; declare curl cursor for select lunghezza from prova; declare continue handler for sqlstate '02000' set finito = 1; open curl; fetch curl into x; ciclo: while not finito do insert into conversione (lunghezza) values (x/2.2); end while ciclo; end;| |
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
Ho risolto ! mancava il fetch interno per passare al record successivo !
Mi sono accorto che però io volevo fare una roba del tipo select conv( lunghezza) from prova; Come posso fare ? Dovrei mettere il campo lunghezza e la tabella prova come variabili incognite per la procedura e poi effettuare una chiamata call conv(lunghezza,prova), però non so come metterle in incognita .. qualcuno sa aiutarmi ?? grazie ! Codice:
create procedure conv() begin declare finito int default 0; declare x int; declare curl cursor for select lunghezza from prova; declare continue handler for sqlstate '02000' set finito = 1; open curl; fetch curl into x; ciclo: while not finito do insert into conversione (lunghezza) values (x/2.2); fetch curl into x; end while ciclo; end;| Ultima modifica di holyfather : 25-05-2011 alle 15:19. |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2007
Messaggi: 182
|
Forse il Prepared Statement fa al caso tuo.
Qui c'è anche un esempio su come potresti utilizzarlo. Codice:
SET @s := CONCAT('SELECT AVG(' , 'Population' , ') FROM ' , 'City'); SELECT @s; +----------------------------------+ | @s | +----------------------------------+ | SELECT AVG(Population) FROM City | +----------------------------------+ Codice:
PREPARE stmt FROM "SELECT AVG(Population) FROM City"; EXECUTE stmt; +-----------------+ | AVG(Population) | +-----------------+ | 350468.2236 | +-----------------+ |
![]() |
![]() |
![]() |
#10 | |
Junior Member
Iscritto dal: May 2011
Messaggi: 21
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:59.