Postgres函数的正确过程语法是否与BigQuery中的过程相同? [英] Proper procedure syntax for Postgres Function as Procedure in BigQuery?

查看:17
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆