在Oracle PLSQL中使用函数的返回值并对其执行操作

bogh5gae  于 2023-04-05  发布在  Oracle
关注(0)|答案(1)|浏览(185)

我有一个函数,它给出一个varchar类型的返回值。到目前为止,我曾经因为某些条件而只得到一个值,现在我在返回部分得到多个值。所以,它给出了一个错误。此外,我需要检查当有多个返回值时,函数应该根据某些条件只返回其中一个。
我试图使用一些循环将返回值存储在该函数内部的某个数组/表中,但由于该函数将被多次使用,因此它应该是动态的。(假设我们得到3个返回值),它应该根据它返回的值选择一个。例如,如果函数返回“R”,“Y”,“B”它应该首先将所有这些值存储在数组中,然后只返回“R”。

4c8rllxm

4c8rllxm1#

有了你提供的细节,我将在函数内部实现一个只返回一个值的控件,类似这样(一个简单的结构,我还没有检查语法以使其完全正确):

CREATE OR REPLACE FUNCTION my_function(RETURN VARCHAR2) AS
    v_numrows INTEGER;
    v_output VARCHAR2(10);
BEGIN
    SELECT COUNT(*) INTO v_numrows
    FROM my_original_query;

    IF v_numrows = 1 THEN
        SELECT x INTO v_output
        FROM my_original_query;
    ELSE
        -- Alternate logic to return only one value in v_output
    END;
    RETURN v_output;
END

或者,如果您可以在一个查询中实现逻辑以选择首选值,则可以使用此替代选项:

CREATE OR REPLACE FUNCTION my_function(RETURN VARCHAR2) AS
    v_output VARCHAR2(10);
BEGIN
    SELECT x INTO v_output
    FROM (  SELECT x,
                   CASE WHEN x = 'R' THEN 1
                        WHEN x = 'Y' THEN 2
                        ELSE 3
                   END order_result
            FROM my_original_query
            ORDER BY order_result
         ) order_query
    WHERE ROWNUM = 1;
    RETURN v_output;
END

order_query子查询有一个ORDER BY子句,它允许您以您喜欢的顺序返回多行,并且使用WHERE ROWNUM = 1子句可以确保您只获得该子查询的第一行。

相关问题