postgresql division by zero

我这里是在mysql迁移greenplum/postgresql的时候遇到的问题

因为gp比较严谨,所以在这里需要调整一下

不多说,直接上解决方案,总体来说就是使用case when 来做判断就ok

postgresql division by zero-》case when a=0 then null else b/a end as name


还有其他方法不过比较麻烦

使用postgresql/greenplum可以看阿里里面的德哥

https://yq.aliyun.com/articles/68417

### PostgreSQL 中的自定义异常处理 在 PostgreSQL 的 PL/pgSQL 编程环境中,可以通过 `RAISE` 语句来实现自定义异常抛出的功能。这种机制允许开发者根据业务需求创建特定的错误消息并中断程序执行流程。以下是关于如何在 PostgreSQL 中定义和处理自定义异常的相关说明。 #### 自定义异常的基础概念 PL/pgSQL 提供了一种灵活的方式来声明和触发自定义异常。通过使用 `EXCEPTION` 子句可以捕获已知类型的异常,并针对这些异常提供相应的处理逻辑[^1]。 #### 创建自定义异常的语法 要定义一个自定义异常,首先需要利用变量存储该异常的状态码或者名称。状态码通常是 SQLSTATE 错误代码的形式表示(例如 `'U0001'`)。下面是一个简单的例子: ```sql DO $$ DECLARE custom_exception EXCEPTION; -- 声明一个自定义异常 BEGIN RAISE custom_exception USING MESSAGE = 'This is a user-defined exception'; -- 抛出自定义异常 EXCEPTION WHEN custom_exception THEN RAISE NOTICE 'Caught the custom exception'; END $$; ``` 上述脚本展示了如何声明以及引发一个名为 `custom_exception` 的新异常类型[^2]。 #### 使用预定义条件名替代手动设置SQLSTATE 除了直接指定字符串形式的SQLSTATE外,还可以采用一些内置的标准条件名字作为快捷方式。比如,“division_by_zero”,“null_value_not_allowed”等等都是合法的选择。这样做的好处是可以让代码更加清晰易读同时也减少了硬编码的可能性。 #### 实际应用案例分析 假设我们正在构建一个银行账户转账功能,在此过程中如果发现余额不足,则应该停止交易并向调用方报告具体原因。此时就可以运用到前面提到的技术要点: ```sql CREATE OR REPLACE FUNCTION transfer_funds(sender_id INT, receiver_id INT, amount NUMERIC) RETURNS VOID AS $$ DECLARE insufficient_balance CONDITION FOR SQLSTATE '45000'; -- 定义新的异常情况 sender_balance NUMERIC; BEGIN SELECT balance INTO sender_balance FROM accounts WHERE id = sender_id; IF sender_balance < amount THEN RAISE insufficient_balance USING MESSAGE := 'Insufficient funds in account', DETAIL := format('Account %s has only %.2f available.', sender_id, sender_balance); ELSE UPDATE accounts SET balance = balance - amount WHERE id = sender_id; UPDATE accounts SET balance = balance + amount WHERE id = receiver_id; END IF; EXCEPTION WHEN insufficient_balance THEN RAISE WARNING '%', SQLERRM; END; $$ LANGUAGE plpgsql; ``` 在这个函数里,当检测到发送者的资金不足以完成支付操作时就会激活预先设定好的 “insufficient_balance” 条件从而终止进一步的动作同时返回详细的诊断信息给客户端应用程序[^3]。 #### 注意事项 尽管能够自由地设计自己的错误类别听起来很吸引人,但在实际项目当中还是建议尽可能遵循现有的分类体系以免造成不必要的混乱局面。另外需要注意的是并非所有的数据库接口都支持完整的SQL标准因此某些特性可能无法跨平台兼容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值