SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.03.2011 21:47:35

ArmanZak
Участник
Зарегистрирован: 19.03.2011
Сообщений: 17

как создавать функции в Mysql

пробаю создать функцыю с помощью create function дает ошибку(код и ошибка ниже)

use my_database;

DELIMITER //
CREATE FUNCTION convert(a_IpStr varchar(45))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE l_IpNum INT DEFAULT 0;
    DECLARE l_IpStr varchar(45);
    SET l_IpStr = a_IpStr;

    IF l_IpStr is NOT NULL THEN
        WHILElength(l_IpStr) > 0 DO
            IF instr(l_IPStr,'.') > 0 THEN
                SET l_IpNum = l_IpNum * 256 + to_number(substr(l_IpStr,1,instr(l_IpStr,'.') - 1));
                SET l_IpStr = substr(l_IpStr,instr(l_IpStr,'.') + 1);
            ELSE
                SET l_IpNum = l_IpNum * 256 + to_number(l_IpStr);
                SET l_IpStr = '';
            END IF;
        END DO;
    END IF;
    RETURN l_IpNum;
END//

 

выдает такую ошибку:
SQL query:

DELIMITER // CREATE FUNCTION convert(a_IpStr varchar(45)) RETURNS INT DETERMINISTIC BEGIN DECLARE l_IpNum INT DEFAULT 0; DECLARE l_IpStr varchar(45); SET l_IpStr = a_IpStr; IF l_IpStr is not null then while length(l_IpStr) > 0 DO if instr(l_IPStr,'.') > 0 then SET l_IpNum = l_IpNum * 256 + to_number(substr(l_IpStr,1,instr(l_IpStr,'.') - 1)); SET l_IpStr = substr(l_IpStr,instr(l_IpStr,'.') + 1); else SET l_IpNum = l_IpNum * 256 + to_number(l_IpStr); SET l_IpStr = ''; end if; end DO; END IF; return l_IpNum; END//

MySQL said:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'convert(a_IpStr varchar(45))
RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE l_' at line 1

подскажыте в чем проблема?

Неактивен

 

#2 19.03.2011 21:53:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: как создавать функции в Mysql

Что говорит select version() ?

Неактивен

 

#3 19.03.2011 22:02:18

ArmanZak
Участник
Зарегистрирован: 19.03.2011
Сообщений: 17

Re: как создавать функции в Mysql

select version()\G

version(): 5.5.8-log

Неактивен

 

#4 20.03.2011 00:09:31

ArmanZak
Участник
Зарегистрирован: 19.03.2011
Сообщений: 17

Re: как создавать функции в Mysql

Сами нашел
вместо end DO; надо end while
вместо to_number(substr(IpStr,1,instr(IpStr,'.') - 1)) надо cast(substr(IpStr,1,instr(IpStr,'.') - 1) as unsigned)
и
вместо to_number(IpStr) надо cast(IpStr as unsigned)

Неактивен

 

#5 20.03.2011 00:10:38

ArmanZak
Участник
Зарегистрирован: 19.03.2011
Сообщений: 17

Re: как создавать функции в Mysql

и еще l_IpStr  я поменял на IpStr

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson