我有两个具有类似结构的Oracle表:
我想在Oracle中编写一个函数,它将每个ID的所有值相加并返回一对(ID,Text),其中Text =' ALERT'如果总和大于100,那么就可以了。否则:
然后,我想对每个表执行查询,例如:
SELECT MY_FUN() FROM TABLE_1
SELECT MY_FUN() FROM TABLE_2
这是一种正确的方法吗?我怎么能写这个函数?
由于
答案 0 :(得分:2)
通常,在SQL中调用执行SQL的函数被认为是不好的做法。它会产生各种各样的问题。
这是一个解决方案:
create or replace function my_fun
( p_sum in number) return varchar2 is
begin
if p_sum > 100 then return 'ALERT';
else return 'OK';
end if;
end;
/
像这样运行:
select id, my_fun(sum(val)) as state
from your_table
group by id;
答案 1 :(得分:0)
您可以在sql中执行此操作,如下所示。如果要为不同的表创建一个函数,可以将其包装在一个获取表名并通过动态SQL运行查询的函数中,但是您只能使用相同的列。
-- begin test data
with test_data(id, value) as
(select 1, 100 from dual union all
select 1, 50 from dual union all
select 2, 75 from dual union all
select 3, 50 from dual union all
select 3, 51 from dual)
-- end test data
select id, sum(value),
case when sum(value) > 100 then 'ALERT'
else 'OK' end AS alert
from test_data
group by id;