始终返回 Null:在 Oracle SQL Developer 中创建函数时使用 Select 语句

问题描述 投票:0回答:1

我需要帮助,我已经被困在这里太久了。我已经尝试过很多事情了。如果有任何故障排除,我们将不胜感激。

我有一个现有的表,其中行是 KPI 的类型,行是多个目标级别上的目标。

关键绩效指标 目标_50 目标_100 目标_150
关键绩效指标A 5 10 20
关键绩效指标B 10 30 50

现在,我正在创建一个需要两个参数的函数:原始分数和 KPI 类型。 例如: KPI(6,'KPI A') 将返回 50% KPI(10,'KPI 1') 将返回 100% KPI(9,'KPI B') 将返回 0% KPI(100,'KPI B') 将返回 150%

这是我的脚本:

create or replace FUNCTION KPI(RAW_SCORE in NUMBER, KPI_TYPE in VARCHAR2)

RETURN NUMBER AS

ACTUAL_SCORE NUMBER;

BEGIN

    select case when RAW_SCORE >= target_150 then 1.50
                when RAW_SCORE >= target_100 then 1.00
                when RAW_SCORE >= target_50 then 0.50
            else 0
            end into ACTUAL_SCORE
    from TARGETS_TABLE
    where TARGETS_TABLE.KPI = KPI_TYPE;
RETURN ACTUAL_SCORE;

但是,这总是返回 NULL。我尝试运行相同的 SELECT 语句并手动输入 raw_score 和 kpi_type。它返回预期值。但无论我输入什么,该函数总是返回 null。

如果我能尝试任何见解和故障排除,我将不胜感激。非常感谢。

我尝试创建一个用户定义的函数,其中包含将使用两个输入参数的 SELECT 语句。我期望返回一个值,但它始终为空。

sql oracle select null user-defined-functions
1个回答
0
投票

您传递给函数的

KPI_TYPE
值在
TARGETS_TABLE
表中不存在,并且该函数引发
NO DATA FOUND
异常。

SQL 查询正在接收

NO DATA FOUND
异常,并理解这意味着返回值应该是
NULL
,并默默地消耗该异常并替换
NULL
代替它。

解决方案是将

KPI_TYPE
值传递给表中实际存在的函数。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.