MySQL 5 ^ Functions

8 отговора 406 прегледа
#1

MySQL 5 ^ Functions

CREATE FUNCTION `getdata` () RETURNS ??
RETURN (Select id from tbl where parrent=1);
Kak da vzema vsichkite rezultati v masiv ili drug tip?

Отговор
в отговор на zvin #2

Ето ти пример

CREATE PROCEDURE `MyRoute`(callerid varchar(50))
SELECT * FROM astcc.routes WHERE callerid REGEXP concat('^',pattern) ORDER BY LENGTH(pattern) DESC limit 0,1

call MyRoute('0035')

Първото създава процедурата, второто я вика.
 

mysql> call MyRoute('0035');
+---------+--------------+----------+-------------+-----------------+--------+-----+------+------+
| pattern | comment | trunks | connectcost | includedseconds | cost | inc | type | db |
+---------+--------------+----------+-------------+-----------------+--------+-----+------+------+
| 00 | All the rest | IaxTrunk | 50000 | 30 | 100000 | 6 | 0 | 0 |
+---------+--------------+----------+-------------+-----------------+--------+-----+------+------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>


Bеer? Mоre?
Плацебото
Отговор
в отговор на bira_more #3

Re: Ето ти пример

CREATE FUNCTION `getdata` () RETURNS ??
RETURN (Select id from tbl where parrent=1);

Celta mi e da vzema v njakakv data type masiv sas vsicki rows koito vrashta zajavkata. Ima li nachin?

Отговор
в отговор на zvin #4

Re: Ето ти пример

Ми например с временна таблица не те ли устройва? В някои SQL-и има тип променлива TABLE ако не се заблуждавам.

Отговор
в отговор на zvin #5

Re: Ето ти пример

Добре де, толкова ли не можеш да промениш това което съм ти пратил?
Аз ползвам процедура, не функция.
И тя ако забелязваш от примера връща цял ред.
Само един ред защото съм казал limit.

Bеer? Mоre?
Плацебото
Отговор
в отговор на bira_more #6

Re: Ето ти пример

Процедурата не връща, тя изпълнява.

Питам има ли тип от данни , който да може да съдържа много колони със записи, който да може да се използва в последствие.

На мястото на въпросчетата в моя пример, ако някой знае да сложи типа или да ми даде насока. Макар, че си мисля, че има по елегантен начин за решение.

Отговор
в отговор на zvin #7

Re: Ето ти пример

Зависи къде ти трябват другите данни.
Ако например ползваш PHP, Perl или C програми, тогава това което аз ти предлагам ще ти свърши работа. Ще свърши защото на мен ми върши работа.
В смисъл това което аз ти предлагам го ползвам в Perl скрипт.
След като направя заявката, по начина по който съм я описал, с fetch_row, получавам реда по същия начин все едно съм написал select....
Ти опита ли това което ти предлагам или просто си философстваме?
Е ако имаш няколко функции в MySQL и искаш да ползваш резултата от една в друга - нямам никаква идя какво и как може да се направи.

Bеer? Mоre?
Плацебото
Отговор
в отговор на zvin #8

Re: Ето ти пример

"Процедурата не връща, тя изпълнява."

И да и не.

Процедурата не връща резултат от изпълнението си но може да връща резултат от заявка към клиента.

Ти все още не си обяснил как и къде искаш да използваш въпросните данни подготвени от процедурата.

А никой тук не притежава кристална топка където да погледне и да разбере какво питаш.

Докторът вече ти предложи различни варианти включително врем4енна таблица. CREATE TEMPORARY ...

salle.online.bg/sig
Отговор
в отговор на salle #9

Re: Ето ти пример

Дойде ми на ума - всъщност това което искаш от тази функция не е ли най-"чисто" да се реализира с VIEW? Точно ще имаш резултат много редове/колони и всичко е "отделено" като във функция, само дето му се казва VIEW. Иначе това което искаш да получиш от функцията малко звучи "нездраво" (не че е задължително невъзможно или забранено).

Отговор