我想创建一个简单的MySQL函数,我有这个MySQL程序:
CREATE PROCEDURE getUser(gU INT)
SELECT * FROM Company
WHERE id_number = gU;
CALL getUser(2);
我需要一些帮助才能将其变成MySQL函数。在程序中使用函数有什么优缺点?
答案 0 :(得分:35)
这是一个mysql函数示例。我希望它有所帮助。 (我还没有测试过,但应该工作)
DROP FUNCTION IF EXISTS F_TEST //
CREATE FUNCTION F_TEST(PID INT) RETURNS VARCHAR
BEGIN
/*DECLARE VALUES YOU MAY NEED, EXAMPLE:
DECLARE NOM_VAR1 DATATYPE [DEFAULT] VALUE;
*/
DECLARE NAME_FOUND VARCHAR DEFAULT "";
SELECT EMPLOYEE_NAME INTO NAME_FOUND FROM TABLE_NAME WHERE ID = PID;
RETURN NAME_FOUND;
END;//
答案 1 :(得分:12)
打开mysql终端:
el@apollo:~$ mysql -u root -pthepassword yourdb
mysql>
删除已存在的功能
mysql> drop function if exists myfunc;
Query OK, 0 rows affected, 1 warning (0.00 sec)
创建功能
mysql> create function hello(id INT)
-> returns CHAR(50)
-> return 'foobar';
Query OK, 0 rows affected (0.01 sec)
使用
创建一个简单的表格进行测试mysql> create table yar (id INT);
Query OK, 0 rows affected (0.07 sec)
在表格中插入三个值
mysql> insert into yar values(5), (7), (9);
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
从yar中选择所有值,每次都运行我们的函数hello:
mysql> select id, hello(5) from yar;
+------+----------+
| id | hello(5) |
+------+----------+
| 5 | foobar |
| 7 | foobar |
| 9 | foobar |
+------+----------+
3 rows in set (0.01 sec)
用语言表达并内化刚刚发生的事情:
您创建了一个名为hello的函数,它接受一个参数。该参数将被忽略并返回一个CHAR(50)
,其中包含值&foffar'。您创建了一个名为yar的表,并为其添加了三行。 select语句为yar返回的每一行运行函数hello(5)
。
答案 2 :(得分:-5)
尝试将CREATE FUNCTION F_TEST(PID INT) RETURNS VARCHAR
此部分更改为
CREATE FUNCTION F_TEST(PID INT) RETURNS TEXT
并更改以下行。
DECLARE NAME_FOUND TEXT DEFAULT "";
它应该有用。