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
1条答案
按热度按时间4c8rllxm1#
有了你提供的细节,我将在函数内部实现一个只返回一个值的控件,类似这样(一个简单的结构,我还没有检查语法以使其完全正确):
或者,如果您可以在一个查询中实现逻辑以选择首选值,则可以使用此替代选项:
order_query子查询有一个
ORDER BY
子句,它允许您以您喜欢的顺序返回多行,并且使用WHERE ROWNUM = 1
子句可以确保您只获得该子查询的第一行。