最善の方法は、SQLがツールで機能することを前提として、SQLをビューに配置することです。
ただし、カスタム集計関数が本当に必要な場合は、主に2つの方法があります。一般的な方法は、一般的なSTRAGGなどのOracle DataCartridgeInterfaceを使用することです。しかし、私の経験では、データカートリッジは混乱を招き、バグが多く、低速です。通常、この関数ははるかにうまく機能します。以下の例、またはこのSQLFiddleを参照してください。COLLECT
create table table1(col1 number, col2 number, col3 number)
/
insert into table1
select 243, 401, 1 from dual union all
select 57489, 400, 1 from dual union all
select 2789, 401, 1 from dual union all
select 598, 400, 1 from dual union all
select 598, 400, 2 from dual
/
create or replace type col1_col2_obj is object
(
col1 number,
col2 number
)
/
create or replace type col1_col2_nt is table of col1_col2_obj
/
create or replace function MyMinSum(p_col1_col2_nt in col1_col2_nt)
return number is
v_result number;
begin
SELECT sum(MinValue)
INTO v_result
FROM
(
SELECT Min(col1) AS MinValue,col2
FROM
table(p_col1_col2_nt)
GROUP BY col2
);
return v_result;
end;
/
select
MyMinSum(cast(collect(col1_col2_obj(col1, col2)) as col1_col2_nt)) test
,col3
from table1
group by col3
/
TEST COL3
841 1
598 2