我正在尝试创建一个mysql函数,但我不断收到以下错误。我的查询有什么问题?
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'BEGIN INSERT INTO order
附近使用正确的语法(carID,clientID)选择car.id,client.id FROM'在第2行
我的查询:
DELIMITER //
CREATE FUNCTION orderCreate(LicenseNumber varchar(30), Phonenumber varchar(20))
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 mysql_insert_id();
END //
DELIMITER ;
答案 0 :(得分:0)
FUNTION
定义签名必须包含RETURNS
条款
您的代码没有使用它。
您无法在mysql_insert_id()
MySQL
内使用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)
但不是您所期望的。
示例:
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
有关功能的文档:
CREATE FUNCTION Syntax for User-defined Functions
{{1}}