这是一张水果表-
FILTER A B C
Apple 0 3 6
Orange 1 4 7
Apricot 2 5 8
是否可以创建一个函数,为苹果(0)返回 A 列,为橙子(4)返回 B 列,为杏(8)返回 C 列?
SELECT Fruit_Function('Apple') FROM dual; --RESULT 0.
SELECT Fruit_Function('Orange') FROM dual; --RESULT 4.
SELECT Fruit_Function('Apricot') FROM dual; --RESULT 8.
现在我有这样的功能
CREATE OR REPLACE FUNCTION Fruit_Function (v_id integer, v_filter varchar2)
RETURN varchar2 as
v_rp varchar2(500);
BEGIN
SELECT ASSIGNEE INTO v_rp
FROM FRUITS a
WHERE a.id = v_id AND a.filter = v_filter;
RETURN v_rp;
END Fruit_Function;
此函数返回列名,但不返回实际值。
创建视图!
create view v_t as
select t.*,
(case when filter = 'Apple' then a
when filter = 'Orange' then b
when filter = 'Apricot' then C
end) as result
from t;
然后,将视图用于包中的查询。
您还可以将该列作为计算列直接添加到表中:
alter table t add result number generated always as
(case when filter = 'Apple' then a
when filter = 'Orange' then b
when filter = 'Apricot' then C
end);
使用这种方法,该列看起来就像是表的一部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句