Задавайте вопросы, мы ответим
Вы не зашли.
Проблема 1:
Пытаюсь создать простенькую тестовую ф-ю и упорно не компилирует
DELIMITER // CREATE FUNCTION IsUser (IN UserName VARCHAR (50)) RETURNS INTEGER BEGIN DECLARE RetVal INTEGER; SELECT id INTO RetVal FROM table WHERE user=UserName; RETURN IFNULL(RetVal, 0); END // DELIMITER ;
и проблема в том, что я не понимаю на что имено Он ругается. Якобы на строку 1, но там делимитер переназначается же
;
/* SQL Error (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 'IN UserName VARCHAR (50)) RETURNS INTEGER
BEGIN
DECLARE RetVal INTEGER;
SELE' at line 1 */
Менял даже INTEGER на INT
Проблема 2:
DROP procedure IF EXISTS UserExist // CREATE procedure UserExist (IN UserName VARCHAR(50), out RetMsg int) BEGIN SELECT id INTO RetMsg FROM Tab WHERE user = UserName; END; // DELIMITER ; DELIMITER // DROP procedure IF EXISTS SomeAuth // CREATE PROCEDURE SomeAuth (UserName VarCHAR(50)) BEGIN DECLARE pid int DEFAULT 0; DECLARE pMSG int DEFAULT 0; DECLARE pFile Mediumblob; DECLARE IsUser VARCHAR(20); set IsUser ='DefVal'; call UserExist(UserName, @pMSG); if pMSG = 0 then set pid = 0; else set pid = 1; end iF; select @pid, @pMSG ; END // DELIMITER ; call SomeAuth('eefe490baa7c36fe1d073cc43fdcabf8');
Результат
@pid @pMSG
<null> 20
и сразу куча вопросов
Почему Pid null, если Default 0?
Почему не сработал If? С примерами из инета я отличий не вижу
mysql> DELIMITER // ; mysql> CREATE PROCEDURE coursedetails_IFELSE(IN S_Subject Varchar(20), OUT S_Course varchar(50)) -> BEGIN -> DECLARE Sub Varchar(20); -> SELECT Subject INTO SUB -> FROM Student_info WHERE S_Subject = Subject; -> IF Sub = 'Computers' THEN -> SET S_Course = 'B.Tech(CSE)'; -> ELSE -> SET S_Course = 'Subject Not in the table '; -> END IF; -> END // Query OK, 0 rows affected (0.00 sec
Отредактированно nixon232 (24.06.2018 21:14:01)
Неактивен
IN, OUT и INOUT могут быть только у процедур
Неактивен
pid и @pid разные переменные (см https://sqlinfo.ru/forum/viewtopic.php?id=363), вторую вы нигде не определяете, поэтому она null
Неактивен
Спасибо, как и предпологал, вопросы оказались плевые. Но если второй еще кое-как мог решить сам (хотя сама проблема произошла из-за чтетия сразу нескольких источников. Одни писали через собаку, другие нет. Я и решил, что через собаку пишется есои используется указатель на переменную), то ответ на первый бы не нашел бы.
Ну и спасибо за статью.
Неактивен