FUNTION
定義簽名必須有RETURNS
子句。
你的代碼沒有使用它。
而且您不能在MySQL
內使用mysql_insert_id()
,但不能使用PHP
。
您必須使用LAST_INSERT_ID()
。
功能:
delimiter //
drop function if exists orderCreate //
CREATE FUNCTION orderCreate(_LicenseNumber varchar(30), _Phonenumber varchar(20))
RETURNS INTEGER
BEGIN
INSERT
INTO `order` (carID, clientID)
SELECT car.id, client.id
FROM car, client, owns
WHERE car.licensenumber = _LicenseNumber
AND client.phonenumber = _Phonenumber
AND car.id = owns.carID
AND owns.clientID = client.id;
RETURN LAST_INSERT_ID();
END;
//
delimiter ;
而且這將是一個更好的做法在列名使用不同的功能/程序的參數名稱。因爲除非使用具有列名的表名限定符,否則在識別它們時會產生歧義,並且可能會對列名上的參數名賦予優先級。
select phonenumber from client;
上述聲明可能導致的輸入值PhoneNumber
但不是你期望的所有行。
例:
mysql> create procedure sp_so_q23838311(in deptno int)
-> select deptno from department
-> union all
-> select department.deptno from department;
Query OK, 0 rows affected (0.00 sec)
mysql> select deptno from department;
+--------+
| deptno |
+--------+
| 10 |
| 20 |
| 30 |
| 40 |
+--------+
4 rows in set (0.00 sec)
mysql> call sp_so_q23838311(20);
+--------+
| deptno |
+--------+
| 20 |
| 20 |
| 20 |
| 20 |
| 10 |
| 20 |
| 30 |
| 40 |
+--------+
8 rows in set (0.15 sec)
文檔上FUNCTION:
CREATE FUNCTION Syntax for User-defined Functions
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
功能的不能改變在表中的數據。程序和包可以。 http://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.html – xQbert
好吧,那麼如果我將其更改爲過程,那麼如何返回創建的訂單ID – user3660361
過程已將參數與結果集。 http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html文檔和示例。 http://www.mysqltutorial.org/stored-procedures-parameters.aspx – xQbert