mysql> mysql> delimiter $$ mysql> mysql> CREATE FUNCTION myFunction -> (in_string VARCHAR(255), -> in_find_str VARCHAR(20), -> in_repl_str VARCHAR(20)) -> -> RETURNS VARCHAR(255) -> BEGIN -> DECLARE l_new_string VARCHAR(255); -> DECLARE l_find_pos INT; -> -> SET l_find_pos=INSTR(in_string,in_find_str); -> -> IF (l_find_pos>0) THEN -> SET l_new_string=INSERT(in_string,l_find_pos,LENGTH(in_find_str),in_repl_str); -> ELSE -> SET l_new_string=in_string; -> END IF; -> RETURN(l_new_string); -> -> END$$ Query OK, 0 rows affected (0.00 sec) mysql> mysql> delimiter ; mysql> select myFunction('ABC','A','Z'); +---------------------------+ | myFunction('ABC','A','Z') | +---------------------------+ | ZBC | +---------------------------+ 1 row in set (0.00 sec) mysql> drop function myFunction; Query OK, 0 rows affected (0.00 sec)
mysql> CREATE FUNCTION HelloWorld4()
-> RETURNS VARCHAR(20)
-> BEGIN
-> RETURN 'Hello World!';
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> select HelloWorld4() //
+---------------+
| HelloWorld4() |
+---------------+
| Hello World! |
+---------------+
1 row in set (0.00 sec)
如果你會其它數據庫的話, 那麼看看那個 SQL 存儲過程編寫 參考手冊 對你會有些幫助。
pan.baidu.com/...715080
用存儲過程算了,函數不能返回一個值,如果要返回多值的話,那就返回一個table,用存儲過程同樣能達到效果
CREATE PROCEDURE `goodcheck`(
in xxx int
in xxx
...
out xxx ..
out xxx char
)
begin
select sum(productstockinfo.num) into production from productstockinfo where pro_id=productId;
end;