如何编写接收字符串参数、按货币类型转换金额并返回多行的SQL函数
语法错误说明
你编写的函数存在以下几处语法/逻辑问题:
- 返回表结构定义错误:
RETURNS TABLE payment_info不符合SQL语法规范,使用TABLE返回结果集时必须明确定义每一列的列名和数据类型,不能直接指定自定义名称 - 分支结构不完整:SQL中的CASE表达式必须以
END关键字闭合,你的代码中缺少对应的闭合标记 - 分支逻辑不符合SQL函数语法:纯SQL语言的函数不支持直接用CASE分支返回多个独立的SELECT结果集
- 未实现货币单位拼接:你的伪代码要求转换后追加对应货币标识,原有尝试代码仅做了汇率乘法,没有拼接单位的逻辑
正确实现方案
推荐用更简洁的纯SQL语法实现,逻辑和你给出的伪代码完全对齐,执行效率更高:
CREATE OR REPLACE FUNCTION get_report(currency_type text) RETURNS TABLE ( payment_id INT, rental_id INT, amount_with_currency TEXT ) AS $$ SELECT payment_id, rental_id, -- 直接在字段层做货币转换和单位拼接,保留2位小数符合货币显示习惯 CASE currency_type WHEN 'EUR' THEN CONCAT(ROUND(amount * 1.16, 2), ' Euros') WHEN 'RMB' THEN CONCAT(ROUND(amount * 6.44, 2), ' RMB') ELSE CONCAT(ROUND(amount, 2), ' USD') END AS amount_with_currency FROM payment; $$ LANGUAGE sql;
函数调用方式
直接执行以下语句即可拿到对应货币转换后的结果:
SELECT * FROM get_report('EUR'); -- 传入EUR/RMB/USD即可
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

