I have a problem. I created a function in MySQL which returns a String (varchar data type).
Here’s the syntax:
DELIMITER $$
USE `inv_sbmanis`$$
DROP FUNCTION IF EXISTS `SafetyStockChecker`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `SafetyStockChecker`
(jumlah INT, safetystock INT)
RETURNS VARCHAR(10) CHARSET latin1
BEGIN
DECLARE statbarang VARCHAR(10);
IF jumlah > safetystock THEN SET statbarang = "Stabil";
ELSEIF jumlah = safetystock THEN SET statbarang = "Perhatian";
ELSE SET statbarang = "Kritis";
END IF;
RETURN (statbarang);
END$$
DELIMITER ;
When I call the function like call SafetyStockChecker(16,16)
, I get this error:
Query : call SafetyStockChecker(16,16)
Error Code : 1305
PROCEDURE inv_sbmanis.SafetyStockChecker does not exist
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
What’s wrong with the function?
ZygD
20.6k39 gold badges75 silver badges95 bronze badges
asked Apr 18, 2013 at 8:24
That is not the correct way to call a function. Here’s an example to call a function:
SELECT SafetyStockChecker(16,16) FROM TableName
The way you are doing now is for calling a STORED PROCEDURE
. That is why the error says:
PROCEDURE inv_sbmanis.SafetyStockChecker does not exist
because it is searching for a Stored procedure and not a function.
answered Apr 18, 2013 at 8:26
John WooJohn Woo
255k69 gold badges492 silver badges488 bronze badges
0
You should use
SELECT SafetyStockChecker(16,16)
answered Apr 18, 2013 at 8:36
Amit GargAmit Garg
3,8271 gold badge29 silver badges35 bronze badges
0
Страниц: 1
- Список
- » Раздел для начинающих
- » INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
#1 19.03.2017 14:11:40
- JamesCaeser
- Участник
- Зарегистрирован: 19.03.2017
- Сообщений: 5
INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Помогите, что делать?
Постоянно выпадает ошибка — INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Я не понимаю где найти и как исправить эту ошибку, кто может подсказать что делать? Пожалуйста!
Неактивен
#2 19.03.2017 14:30:17
- rgbeast
- Администратор
- Откуда: Москва
- Зарегистрирован: 21.01.2007
- Сообщений: 3874
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
В базе данных luigi_rich должна быть хранимая функция TO_SECONDS, но ее нет. Возможно, забыли перенести при переезде.
Неактивен
#3 19.03.2017 15:32:24
- JamesCaeser
- Участник
- Зарегистрирован: 19.03.2017
- Сообщений: 5
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
А куда вставить этот to_seconds чтобы все заработало? Никак понять не могу.
Неактивен
#4 19.03.2017 15:36:50
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
TO_SECONDS(expr) это стандартная
вероятно у вас в запросе есть пробел перед открывающей скобкой.
Неактивен
#5 19.03.2017 16:29:02
- JamesCaeser
- Участник
- Зарегистрирован: 19.03.2017
- Сообщений: 5
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
А где найти эту строку? Все перерыл, нигде нету, ни в БД, ни в других файлах.
Неактивен
#6 19.03.2017 16:33:39
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
а где у вас возникает ошибка? это работа сайта, перенос данных, выполнение запроса в клиенте?
Неактивен
#7 19.03.2017 16:46:16
- rgbeast
- Администратор
- Откуда: Москва
- Зарегистрирован: 21.01.2007
- Сообщений: 3874
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Какая у Вас версия MySQL?
TO_SECONDS() is available beginning with MySQL 5.5.0.
Неактивен
#8 19.03.2017 16:55:31
- JamesCaeser
- Участник
- Зарегистрирован: 19.03.2017
- Сообщений: 5
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Данная ошибка возникает при запуске сервера в MTA, какая версия, я сам точно не знаю, вроде 5.6, но это не точно, можно где-то узнать?
Неактивен
#9 20.03.2017 11:45:12
- deadka
- Администратор
- Зарегистрирован: 14.11.2007
- Сообщений: 2399
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Узнать можно с помощью запроса
select version();
в консоли mysql или phpmyadmin, если у Вас такой установлен.
Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли…
Неактивен
#10 20.03.2017 19:29:41
- JamesCaeser
- Участник
- Зарегистрирован: 19.03.2017
- Сообщений: 5
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Вроде вот — 5.6.21, это сможет как-то помочь вам?
Неактивен
#11 20.03.2017 19:51:26
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
значит проблема в том, что перед скобкой стоит лишний символ (пробел или перенос строки, или …)
где это искать в МТА лучше спрашивать на соответствующем профильном ресурсе
как правило, такие ошибки следствие установки «левого» плагина/мода
Неактивен
Страниц: 1
- Список
- » Раздел для начинающих
- » INFO: MYSQL ERROR 1305: FUNCTION luigi_rich.TO_SECONDS does not exist
Описание проблемы:
1. Создайте простую хранимую процедуру запроса в MySQL:
mysql> CREATE PROCEDURE spl() SELECT VERSION();
Query OK, 0 rows affected (0.01 sec)
2. Затем используйте CALL для вызова этой хранимой процедуры, и ошибка ОШИБКА 1305 (42000): PROCEDURE test.sp1 не существует:
mysql> CALL sp1;
ERROR 1305 (42000): PROCEDURE test.sp1 does not exist
Исправление проблем:
1. Сначала подумайте, действительно ли эта хранимая процедура отсутствует, проверьте текущую хранимую процедуру и убедитесь, что хранимая процедура существует:
mysql> SHOW PROCEDURE STATUS;
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| test | spl | PROCEDURE | [email protected] | 2019-02-28 13:00:02 | 2019-02-28 13:00:02 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)
2. В это время я думал, что у пользователя нет разрешения на вызов текущей хранимой процедуры, и разрешение хранимой процедуры было предоставлено текущему пользователю. В это время произошла другая ошибка:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
ERROR 1133 (42000): Can't find any matching row in the user table
Это обнаруживается путем запроса данных, которые необходимо обновить текущую хранимую процедуру перед выполнением оператора авторизации:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@localhost;
Query OK, 0 rows affected (0.00 sec)
Выполните вызов этой хранимой процедуры еще раз, и отобразится успешный вызов:
mysql> SHOW PROCEDURE STATUS;
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| test | spl | PROCEDURE | [email protected] | 2019-02-28 13:11:23 | 2019-02-28 13:11:23 | DEFINER | | utf8 | utf8_general_ci | utf8_general_ci |
+------+------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)
mysql> CALL spl;
+-----------+
| VERSION() |
+-----------+
| 5.5.40 |
+-----------+
1 row in set (0.00 sec)
Используется
МySql — 5,7 x64
Имеется две таблицы
-- Дамп структуры для таблица 01tst.tst_003_tb_01_calcul
CREATE TABLE IF NOT EXISTS `tst_003_tb_01_calcul` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pol_1` char(50) DEFAULT NULL,
`idsub` int(11) DEFAULT NULL,
`pol_3` int(11) DEFAULT NULL,
`pol_scepka` text,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- Дамп данных таблицы 01tst.tst_003_tb_01_calcul: ~3 rows (приблизительно)
/*!40000 ALTER TABLE `tst_003_tb_01_calcul` DISABLE KEYS */;
INSERT INTO `tst_003_tb_01_calcul` (`id`, `pol_1`, `idsub`, `pol_3`, `pol_scepka`) VALUES
(1, 'dog 1', 1, 1, '< ТЕКСТ _ ЗАПИСИ pol_4_zp 1> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 2> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 3> '),
(4, 'dog 2', 2, 1, '< ТЕКСТ _ ЗАПИСИ pol_4_zp 4> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 5> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 6> '),
(7, 'dog 3', 3, 1, '< ТЕКСТ _ ЗАПИСИ pol_4_zp 7> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 8> , < ТЕКСТ _ ЗАПИСИ pol_4_zp 9>');
/*!40000 ALTER TABLE `tst_003_tb_01_calcul` ENABLE KEYS */;
-- Дамп структуры для таблица 01tst.tst_003_tb_02_calcul
CREATE TABLE IF NOT EXISTS `tst_003_tb_02_calcul` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pol_1` char(50) DEFAULT NULL,
`idsub` int(11) DEFAULT NULL,
`pol_3` int(11) DEFAULT NULL,
`pol_4` text,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- Дамп данных таблицы 01tst.tst_003_tb_02_calcul: ~9 rows (приблизительно)
/*!40000 ALTER TABLE `tst_003_tb_02_calcul` DISABLE KEYS */;
INSERT INTO `tst_003_tb_02_calcul` (`id`, `pol_1`, `idsub`, `pol_3`, `pol_4`) VALUES
(1, 'dog 1', 1, 1, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 1'),
(2, 'dog 1', 1, 2, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 2'),
(3, 'dog 1', 1, 3, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 3'),
(4, 'dog 2', 2, 1, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 4'),
(5, 'dog 2', 2, 2, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 5'),
(6, 'dog 2', 2, 3, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 6'),
(7, 'dog 3', 3, 1, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 7'),
(8, 'dog 3', 3, 2, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 8'),
(9, 'dog 3', 3, 3, 'ТЕКСТ _ ЗАПИСИ pol_4_zp 9');
/*!40000 ALTER TABLE `tst_003_tb_02_calcul` ENABLE KEYS */;
Запрос для группировки из приведённых выше таблиц в одну
select t01.idsub, t01.pol_1, GROUP_CONCAT(t02.pol_4) AS scepk
from tst_003_tb_01_calcul t01
inner join tst_003_tb_02_calcul t02
ON t02.idsub = t01.idsub
group by t01.idsub
При запуске запроса появляется ошибка:
«Error Code: 1305. FUNCTION 01tst. GROUP_CONCAT does not exist»
Вопрос
Как избавится от ошибки?
Скрин