2016-05-08 5 views
-2
CREATE FUNCTION FC_IDKRITERIA() 
RETURNS CHAR(3) 
AS 
BEGIN 
DECLARE @MAX INT , @KODEBARU CHAR(3) 
SELECT @MAX = MAX (RIGHT(IDKRITERIA,2)) FROM KRITERIA 
IF @MAX IS NULL 
SET @MAX = 0 
SET @KODEBARU = 'K' + RIGHT('0'+CONVERT(VARCHAR(3),@MAX+ 1) ,2) 
RETURN @KODEBARU 
END 
+1

Вам не хватает ';' в конце каждого утверждения. – Barmar

ответ

2

Каждое заявление в процедуре должно заканчиваться на ;. Чтобы это не прекращало определение функции, используйте команду DELIMITER, чтобы изменить разделитель команд на что-то еще.

И при выполнении переменной назначения в пункте SELECT вы должны использовать :=.

В начале определения функции нет AS.

Вы не объявляете переменные, которые начинаются с @.

Вам необходимо THEN и END IF в сообщении IF.

Чтобы объединить строки, используйте CONCAT(), а не +.

У вас есть аргументы CONVERT() в неправильном порядке, и VARCHAR(3) не является допустимым аргументом типа, он должен быть CHAR(3).

В функции вы не можете использовать оператор SELECT на верхнем уровне, потому что это означает возврат результирующего набора, а функции могут возвращать только одно значение. Поэтому вам необходимо назначить @MAX из выражения (SELECT ...).

DELIMITER $$ 

CREATE FUNCTION FC_IDKRITERIA() RETURNS CHAR(3) 
BEGIN 
    SET @MAX = (SELECT MAX (RIGHT(IDKRITERIA,2)) FROM KRITERIA); 
    IF @MAX IS NULL 
    THEN SET @MAX = 0; 
    END IF; 
    SET @KODEBARU = CONCAT('K', RIGHT('0'+CONVERT(@MAX+ 1, CHAR(3)) ,2)); 
    RETURN @KODEBARU; 
END; 
$$ 
DELIMITER ; 
+0

++ приятный. Также как консультация: мне нужно проверить репутацию пользователя, прежде чем вносить свой голос в таблицу «Голоса». Так что я должен делать это * (проверка) * в ** стороне базы данных ** * (с помощью триггера) * или ** на стороне сервера ** * (выборка пользовательской репутации при регистрации и установке ее на сеанс, а затем использование этого сеанс для проверки) *? – Shafizadeh

+0

@Shafizadeh У вас есть ответ на ваш вопрос: http://stackoverflow.com/questions/37096493/checking-users-reputation-by-php-vs-mysql/37097408#37097408 – Barmar

+0

Да, вы правы ..! Thx для вашего внимания. Кстати, я действительно застрял на [этой проблеме] (http://stackoverflow.com/questions/37160002/how-do-i-check-a-few-conditions-before-updating). Честно говоря, я смущен, когда ты снова звонишь. Но я обещаю, что это последнее. Поэтому, если у вас есть свободное время, взгляните на него. – Shafizadeh

Смежные вопросы