GBase 8s
其他
问答

boolean类型作为自定义函数参数,调用函数时传递表达式会提示语法错误。是否有其他方式实现我想要的效果?

发表于2024-03-10 17:39:04103次浏览5个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: v8.8

【操作系统】: 

【CPU】:

【问题描述】*: 

我自定义了如下函数:

create function if_fuc(b boolean, f1 integer, f2 integer)
returns integer;
	if b then return f1; else return f2; end if;
end function;

调用:

call if_fuc(1=1, 1, 0) -- 报错

select if_fuc(u.age > 18, 1, 0) from user_info u  -- 报错

call if_fuc('t', 1, 0) -- 不报错
select if_fuc(u.enable, 1, 0) from user_info u  -- enable为boolean时,不报错

评论

登录后才可以发表评论
用户头像
liaosnet发表于 2年前
SPL中的参数是常规参数,即对应数据类型,而不能使用表达式。 1 = 1, u.age > 18 这样的就是表达式。
原因是:SPL是直接把你的参数值传入了的,并不会对它进行表达式转换。
最佳回答
GBase用户15163发表于 2年前
@liaosnet:感谢您的回答!这种情况是否有其他办法可以实现我想要的功能?即自定义函数接受调用处以表达式的方式传参
用户头像
liaosnet发表于 2年前
@GBase用户15163:现有阶段不支持。
GBase用户15163发表于 2年前
@liaosnet:好的,感谢
崔哥发表于 7个月前
不知香积寺,数里入云峰。古木无人径,深山何处钟。泉声咽危石,日色冷青松。薄暮空潭曲,安禅制毒龙。