创建函数时出现语法错误

iswrvxsc  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(423)

我已经花了两个多小时的时间来搜索我的答案。
我对sql和mysql完全陌生,我尝试编写以下函数:

  1. CREATE FUNCTION fp_spinofffactor (id char(8), startdate date)
  2. RETURNS float
  3. BEGIN
  4. DECLARE spinoffFactor float; (ERROR- EXPECTED A ";")
  5. select spinoffFactor = ISNULL(EXP(SUM(LOG(spinoffFactor))),1)
  6. from(
  7. select case when (prev_price- divs) <= 0 THEN 1
  8. else (prev_price- divs)/prev_price end as spinoffFactor
  9. from (select
  10. divs,
  11. fp_v2.fp_prevUnadjPrice(id, ex_date) as prev_price
  12. from (
  13. select sum(fbd.p_divs_pd) as divs,fbd.p_divs_exdate as ex_date
  14. from fp_v2.fp_basic_dividends fbd
  15. where fbd.fsym_id = id
  16. and fbd.p_divs_s_pd=1
  17. and fbd.p_divs_exdate > startdate
  18. group by fbd.p_divs_exdate ) a ) b ) c;
  19. return spinofffactor; ERROR (Return is not valid at this position)
  20. END ERROR (END IS NOT VALID AT THIS position)

但是我有很多语法错误。我已经把错误写在哪里了。
我很难找到有关mysql和工作台语法规则的信息。
有人能帮忙吗?

woobm2wo

woobm2wo1#

您需要在mysql工作台中提供分隔符来告诉代码的开始和结束位置。假设你的语法是正确的,你可以写如下。

  1. DELIMITER $$
  2. CREATE FUNCTION fp_spinofffactor (id char(8), startdate date)
  3. RETURNS float
  4. BEGIN
  5. DECLARE spinoffFactor float;
  6. select spinoffFactor = ISNULL(EXP(SUM(LOG(spinoffFactor))),1)
  7. from(
  8. select case when (prev_price- divs) <= 0 THEN 1
  9. else (prev_price- divs)/prev_price end as spinoffFactor
  10. from (select
  11. divs,
  12. fp_v2.fp_prevUnadjPrice(id, ex_date) as prev_price
  13. from (
  14. select sum(fbd.p_divs_pd) as divs,fbd.p_divs_exdate as ex_date
  15. from fp_v2.fp_basic_dividends fbd
  16. where fbd.fsym_id = id
  17. and fbd.p_divs_s_pd=1
  18. and fbd.p_divs_exdate > startdate
  19. group by fbd.p_divs_exdate ) a ) b ) c;
  20. return spinofffactor;
  21. END$$
  22. DELIMITER ;

您也可以从mysql命令提示符运行它,它应该可以工作。

展开查看全部

相关问题