如何调试一个";除零“;postgresql中的错误
我在一次选择中使用了许多不同的视图和plpgsql函数/聚合。当我在某些数据集上运行此SELECT时,我会得到一个如何调试一个";除零“;postgresql中的错误,sql,debugging,postgresql,Sql,Debugging,Postgresql,我在一次选择中使用了许多不同的视图和plpgsql函数/聚合。当我在某些数据集上运行此SELECT时,我会得到一个除以零的错误。不幸的是,我没有得到任何精确的零除发生的细节 有什么好方法可以精确定位问题发生的确切位置吗?在psql中运行相同的代码将产生更多有用的信息,例如: ERROR: division by zero CONTEXT: PL/pgSQL function "mean_estimator_sfunc" line 10 during statement block local
除以零的错误。不幸的是,我没有得到任何精确的零除发生的细节
有什么好方法可以精确定位问题发生的确切位置吗?在psql中运行相同的代码将产生更多有用的信息,例如:
ERROR: division by zero
CONTEXT: PL/pgSQL function "mean_estimator_sfunc" line 10 during statement block local variable initialization
张贴你的功能。下面是Oracle文档中关于如何避免异常的一些好例子。仅SQL也可以执行相同操作:
你从哪里得到这个信息的?这是全部信息吗?@ClodoaldoNeto:很好!我在我的SQLIDE(AquaDataStudio)中得到了错误。在psql中运行相同的代码时,我得到了相当多的上下文信息。我的问题不是将除以零
,而是找到需要修复它的位置。@@Karl Bartel-发布您的代码,也许我们可以帮助您找到它出现的位置。在我个人看来,最好确保代码中永远不会出现例外情况。如果可能的话,我会重写/添加代码,在你找到它之后处理所有可能的异常。当然,谢谢你的提议。但是这里要发布的代码太多了,我问这个问题只是为了找到一个更具针对性的方法,找到我忘记正确处理除法为零的情况的地方。psql输出主要是我想要的。使用默认设置,您还应该在db日志文件中找到这些信息。
DECLARE
stock_price NUMBER := 9.73;
net_earnings NUMBER := 0;
pe_ratio NUMBER;
BEGIN
pe_ratio :=
CASE net_earnings
WHEN 0 THEN NULL
ELSE stock_price / net_earnings
end;
END;
/