mysql过程函数返回错误

时间:2014-05-23 21:04:38

标签: mysql function procedure

我正在尝试创建一个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 ;

1 个答案:

答案 0 :(得分:0)

FUNTION定义签名必须包含RETURNS条款 您的代码没有使用它。

您无法在mysql_insert_id() MySQL内使用PHPLAST_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}}