---
title: "Decode 函数中包含 UDF 时报 ORA-01476: divisor is equal to zero-OceanBase数据库使用指南"
description: "了解OceanBase数据库在实际应用中关于Decode 函数中包含 UDF 时报 ORA-01476: divisor is equal to zero相关的常见问题和使用技巧，帮助您快速解决Decode 函数中包含 UDF 时报 ORA-01476: divisor is equal to zero的难题。"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# Decode 函数中包含 UDF 时报 ORA-01476: divisor is equal to zero

更新时间：2026-05-29 08:46

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

同样逻辑的语句，当不涉及 udf (用户自定义函数)时，结果正常，但涉及 udf 时，报错如下。

```shell
ORA-01476: divisor is equal to zero

```

重现问题的示例如下。

1. 创建测试表。

   ```shell
   obclient > CREATE TABLE TEST_DECODE_TAB (
    "ID"      NUMBER(12) NOT NULL,
    "NUMA"    NUMBER(5,2),
    "NUMB"    NUMBER(5,2),
    CONSTRAINT "PK_TEST_DECODE_TAB" PRIMARY KEY ("ID"));
    Query OK, 0 rows affected (0.524 sec)

   ```
 2. 插入测试数据。

   ```shell
   obclient > insert into TEST_DECODE_TAB values(1,0,0);
   Query OK, 1 row affected (0.135 sec)

   ```
 3. 提交插入数据。

   ```shell
   obclient > commit;
   Query OK, 0 rows affected (0.009 sec)

   ```
 4. 自定义函数。

   ```shell
   obclient > create or replace function abs_again (i_num number)
              return number
              is
              o_num number;
              begin
              o_num:=abs(o_num);
              return o_num;
              end;
              /
   Query OK, 0 rows affected (0.174 sec)

   ```
 5. 正常执行的语句。

   ```shell
   obclient > select id,numa,numb,nvl(decode(abs(NUMB),0,0,NUMA/NUMB),0) val from TEST_DECODE_TAB ;

   ```

   输出结果如下。

   ```shell
   +----+------+------+-----+
   | ID | NUMA | NUMB | VAL |
   +----+------+------+-----+
   |  1 |    0 |    0 |   0 |
   +----+------+------+-----+
   1 row in set (0.033 sec)

   ```

   ```shell
   obclient > select id,numa,numb,nvl(decode(NUMB,0,0,NUMA/NUMB),0) val from TEST_DECODE_TAB;

   ```

   输出结果如下。

   ```shell
   +----+------+------+-----+
   | ID | NUMA | NUMB | VAL |
   +----+------+------+-----+
   |  1 |    0 |    0 |   0 |
   +----+------+------+-----+
   1 row in set (0.024 sec)

   ```
 6. 执行报错的语句。

   ```shell
   obclient > select id,numa,numb,nvl(decode(abs_again(NUMB),0,0,NUMA/NUMB),0) val from TEST_DECODE_TAB;
   ORA-01476: divisor is equal to zero

   ```

## 问题原因

OceanBase 数据库表达式含udf的时候，即使不需要计算除以 0，计算的时候不能忽略除以 0 的错误，因此报错。

## 适用版本

OceanBase 数据库 V3.x 版本。

## 解决方法

仅能通过修改业务逻辑，例如改用 case when 解决。

上一篇

[PL 中 case when 语句执行期报 -4016](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000048159)

下一篇

[PL 在 for loop cursor 中使用 goto 可能报错 -5589](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000048150) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
