2011-11-08 25 views
1

我忘記了放分隔符指令,一些分號並且使用了在mysql中無效的[select variable = field]之類的tsl語法。
使用tsl語法時發生Mysql錯誤是[不允許從函數返回結果集]並且沒有多大幫助。
@AndreKR把它全部給我,謝謝。
我使用mysqlworkbench 5.2.30 CE。 功函數變爲:在自定義nextval函數內的mysql bigint變量聲明中的錯誤

delimiter // 
CREATE FUNCTION nextval (seq_name varchar(100)) 
    RETURNS bigint(20) 
    READS SQL DATA 
    NOT DETERMINISTIC 
    BEGIN 
    DECLARE workval bigint(20); 
    SELECT count(1) into workval 
     FROM tip_sequence 
     WHERE sequencename = seq_name; 
    IF workval <> 1 THEN 
     DELETE 
      FROM tip_sequence 
      WHERE sequencename = seq_name; 
     INSERT 
      INTO tip_sequence (sequencename, sequenceval, sequencestep) 
      VALUES (seq_name, 1, 1); 
    END IF; 
    SELECT sequenceval into workval 
     FROM tip_sequence 
     WHERE sequencename = seq_name; 
    UPDATE tip_sequence 
     SET sequenceval = sequenceval + sequencestep 
     WHERE sequencename = seq_name; 
    RETURN workval; 
    END// 
delimiter ; 
+0

MySQL版本.... –

+0

@米奇小麥的版本是[服務器版本:53年1月5日,社區MySQL社區服務器(GPL) – newway

回答

0

由於DECLARE workval bigint(20);線是第一位的,並在最後一個分號,我懷疑你忘了輸入功能代碼之前改變分隔符(儘管這取決於客戶端你」上重新使用)。

試着改變你的代碼:

DELIMITER # 
CREATE FUNCTION nextval (seq_name varchar(100)) 

... 

END# 
+0

非常感謝,它解決了這個問題。我現在有一個新的問題,並編輯問題的細節。我做了你指向我的更正。 – newway

+0

如果您有其他問題,請打開一個新問題。 (這個解決方案與「into」這個詞有什麼關係,我想)。 – AndreKR

+0

Im sory,我試着聲明另一個變量做轉移值並且返回但是它不工作,有詳細問題:http:// stackoverflow.com/questions/8073404/function-complain-about-not-allowed-to-return-a-result-set-from-a-function-whe – newway