View Full Version : [SQL] Funzioni
holyfather
24-05-2011, 16:59
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 !
Certo che si. (http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)
holyfather
25-05-2011, 08:08
Certo che si. (http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html)
Ok hai qualche link utile per cortesia visto che non riesco a trovarne ?
Ok hai qualche link utile per cortesia visto che non riesco a trovarne ?
Quello che ti ha postato E' UN LINK :D.
holyfather
25-05-2011, 11:33
Quello che ti ha postato E' UN LINK :D.
Lol se sono stordito :-) grazie :-) ora guardo
holyfather
25-05-2011, 14:21
Lol se sono stordito :-) grazie :-) ora guardo
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 !
holyfather
25-05-2011, 16:02
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
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;|
holyfather
25-05-2011, 16:07
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 !
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;|
Forse il Prepared Statement (http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html) fa al caso tuo.
Qui (http://dev.mysql.com/tech-resources/articles/mysql-storedproc.html) c'è anche un esempio su come potresti utilizzarlo.
SET @s := CONCAT('SELECT AVG(' , 'Population' , ') FROM ' , 'City');
SELECT @s;
+----------------------------------+
| @s |
+----------------------------------+
| SELECT AVG(Population) FROM City |
+----------------------------------+
PREPARE stmt FROM "SELECT AVG(Population) FROM City";
EXECUTE stmt;
+-----------------+
| AVG(Population) |
+-----------------+
| 350468.2236 |
+-----------------+
holyfather
27-05-2011, 11:25
Forse il Prepared Statement (http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html) fa al caso tuo.
Qui (http://dev.mysql.com/tech-resources/articles/mysql-storedproc.html) c'è anche un esempio su come potresti utilizzarlo.
SET @s := CONCAT('SELECT AVG(' , 'Population' , ') FROM ' , 'City');
SELECT @s;
+----------------------------------+
| @s |
+----------------------------------+
| SELECT AVG(Population) FROM City |
+----------------------------------+
PREPARE stmt FROM "SELECT AVG(Population) FROM City";
EXECUTE stmt;
+-----------------+
| AVG(Population) |
+-----------------+
| 350468.2236 |
+-----------------+
Bella ! grazie !
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.