0

我是 MySQL 功能领域的新手,但我似乎无法让它正常工作。基本上,每次我从这个特定的表运行 SELECT 查询时,都应该显示下一个递增的值。

这是我的桌子:

CREATE TABLE testdb.id_generator(
  invoice_id INT(11) NOT NULL,
  PRIMARY KEY (invoice_id)
)
ENGINE = INNODB
AVG_ROW_LENGTH = 16384
CHARACTER SET latin1
COLLATE latin1_swedish_ci;

这是功能:

CREATE 
FUNCTION testdb.f_id_test()
  RETURNS INT(11)

BEGIN
  DECLARE v_val INT;
  DECLARE c_select CURSOR FOR SELECT invoice_id
                              FROM
                                id_generator;

  OPEN c_select;

  FETCH c_select INTO v_val;
  CLOSE c_select;

  UPDATE id_generator
SET
  invoice_id = invoice_id + 1;
  RETURN v_val;
END

每当我尝试运行查询

  SELECT f_id_test()
  FROM
  id_generator  

它说“无法更新存储函数/触发器中的表'id_generator',因为它已被调用此存储函数/触发器的语句使用。” 我在这里做错了什么?

4

1 回答 1

2

当您运行语句时,请尝试不使用“FROM id_generator”,基本上只是:

SELECT f_id_test()

您的函数已经从 id_generator 表中提取数据(因此 FROM 子句不会改变它),并且错误是说您的 SELECT 语句正在使用该函数试图更新的同一个表。

于 2013-01-28T23:55:19.260 回答