Postgres函数的正确过程语法是否与BigQuery中的过程相同? [英] Proper procedure syntax for Postgres Function as Procedure in BigQuery?
本文介绍了Postgres函数的正确过程语法是否与BigQuery中的过程相同?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在postgres中有以下函数:
create function my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric) returns numeric
language plpgsql
as
$$
DECLARE
_charge numeric;
BEGIN
IF qty = 0 THEN
RETURN 0.00::numeric(19, 2);
END IF;
_charge := GREATEST(price * qty, min_charge)::numeric(19, 2);
RETURN (_charge + COALESCE(other_fee, 0.00))::numeric(19, 2);
END;
$$;
alter function my_function(numeric, numeric, numeric, numeric) owner to my_location;
我想将它转换为BigQuery以实现相同的功能,到目前为止我已经尝试过了:
create procedure my_schema.my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric)
BEGIN
IF qty = 0 THEN
RETURN 0.00::numeric(19, 2);
END IF;
_charge := GREATEST(price * qty, min_charge)::numeric(19, 2);
RETURN (_charge + COALESCE(other_fee, 0.00))::numeric(19, 2);
END;
但我收到以下错误:
Syntax error: Expected ";" but got floating point literal "0.00" at [4:16]
要在BigQuery中成功生成与过程相同的postgres样式函数,正确的命令是什么?
推荐答案
我想将其转换为BigQuery以实现相同的功能
考虑以下示例
create temp function my_function(price numeric, qty numeric, min_charge numeric, other_fee numeric)
returns numeric as (
case when qty = 0 then 0
else greatest(price * qty, min_charge) + coalesce(other_fee, 0)
end
);
select my_function(1, 1, 1, 1)
如果您想要永久功能-只需删除create temp function
中的Temp
这篇关于Postgres函数的正确过程语法是否与BigQuery中的过程相同?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文