У меня есть такая функция:
DELIMITER $$
create function fp_v2.fp_splitadjprice (id char(8), startdate date)
returns float
begin
declare splitfactor float;
declare splitadjprice float;
declare spinofffactor float;
set splitfactor = 1.0;
select splitfactor = fp_v2.fp_splitfactor_prices(id, startdate);
select splitadjprice = convert(float,p_price * splitfactor)
from fp_v2.fp_basic_prices p
where fsym_id = id and p_date = startdate;
return splitadjprice;
END$$
DELIMITER ;
Я получаю сообщение об ошибке во втором операторе выбора, в котором говорится: «Ожидается a (или с».
Я действительно не понимаю синтаксис MySQL workbench. Мне это кажется довольно случайным. Например, когда я должен поставить; а когда я не должен ?. Каковы правила?
Любые глупые вопросы приветствуются, если в них проявляются некоторые исследовательские усилия.
Это похвально, но совершенно не подходит для этого конкретного сайта. Возможно, вы сможете найти подходящий канал MySQL на Stack Overflow чат, где такого рода вещи были бы вполне приемлемыми (но не торопитесь, пока не почувствуете, что приемлемо в любой конкретной комнате).
@MadhurBhaiya Вместо этого я попытался задать вопрос :)
@Chris номинирован на открытие
Также номинирован на открытие. Но больше всего нужен `SELECT ... INTO @ variable` dev.mysql.com/doc/refman/8.0/en/select-into.html
Преобразованный синтаксис тоже неверен. dev.mysql.com/doc/refman/8.0/en/cast-functions.html
Не знаю почему. Но переменные в функциях @ не используют. пользовательские переменные в отдельном запросе делает.
@JuanCarlosOropeza Хорошо, так что оставить их вне функций, как у меня, вполне нормально?
Да, ошибка возникает из-за того, что вы не используете SELECT INTO. Это небольшой пример. для SELECT INTO 'rextester.com/WNYUQW35138
Потому что сейчас вы создаете псевдоним. SELECT Alias = field == SELECT field as Alias Что вы хотите, так это присвоить результат переменной, и это с SELECT INTO ... вот еще один пример с использованием нескольких функций. rextester.com/IDPY20240
Как я также сказал, у вас проблема с CAST(), сначала тип go как второй параметр, например CAST(value, type), второй float не является допустимым типом для CAST, вам нужно использовать DECIMAL(x,y), проверьте здесь rextester.com/CVJM89914
Позвольте нам продолжить обсуждение в чате.






Вам нужно использовать SELECT .. INTO для обновления ваших переменных.
convert sintaxis - это CONVERT(value, type), и вы не можете использовать FLOAT, поскольку тип должен использовать DECIMAL, и вам, вероятно, он все равно не нужен, потому что обе ваши переменные уже являются плавающими.
DELIMITER $$
create function fp_v2.fp_splitadjprice (id char(8), startdate date)
returns float
begin
declare splitfactor float;
declare splitadjprice float;
declare spinofffactor float;
set splitfactor = 1.0;
SELECT fp_v2.fp_splitfactor_prices(id, startdate) INTO splitfactor ;
SELECT convert(p_price * splitfactor, DECIMAL (10,4) INTO splitadjprice
FROM fp_v2.fp_basic_prices p
WHERE fsym_id = id and p_date = startdate;
return splitadjprice;
END$$
DELIMITER ;
В чем вопрос ?