0
私は、numberおよびvarchar2データ型のINパラメータをほとんど受け入れず、数値データ型を返すOracle関数を持っています。関数内では、INパラメータを持つ表から選択していますが、 'WHERE'節に適用されています。これにより、このフィルタは選択されたクエリに適用されず、代わりにその条件がスキップされます。私は明示的にINパラメータからの値を格納する変数を宣言する必要がありますし、WHERE句でこれらの変数を使用する必要があります。なぜこれが必要なのか分かりません。追加の変数を使用せずにこれを解決するのを手伝ってください。Oracle関数へのINパラメータ
以下は私が使用している関数です。
create or replace FUNCTION AGG_NC8B_FN (
FACTORY_ID NUMBER,
REPORTING_PERIOD NUMBER,
GRANULARITY_TYPE_TXT VARCHAR2,
GRANULAROTY_LEVEL_TXT VARCHAR2,
CONDITION_ID NUMBER)
RETURN NUMBER
IS
CAL_VALUE OCT_DMA_MOMIS.FCT_KSTACK_AGGREGATION.AGGREGATE_VALUE_DEC%TYPE;
-- temporary variables --not sure why this is required?
A number;
B number;
C varchar2(100);
D varchar2(100);
E number;
BEGIN
A:=FACTORY_ID;
B:=REPORTING_PERIOD;
C:=GRANULARITY_TYPE_TXT;
D:=GRANULAROTY_LEVEL_TXT;
E:=CONDITION_ID;
SELECT DECODE(B.AGGREGATE_VALUE_DEC,0,0,((A.AGGREGATE_VALUE_DEC/B.AGGREGATE_VALUE_DEC)*100))
INTO CAL_VALUE
FROM (SELECT AGGREGATE_VALUE_DEC
FROM OCT_DMA_MOMIS.FCT_KSTACK_AGGREGATION
WHERE FK_FIGURE_ID =30121
AND FK_FACTORY_ID =A
AND LK_REPORTING_PERIOD =B
AND GRANULARITY_TYPE_TXT=C
AND GRANULAROTY_LEVEL_TXT=D
AND FK_CONDITION_ID =E) A ,
(SELECT AGGREGATE_VALUE_DEC
FROM OCT_DMA_MOMIS.FCT_KSTACK_AGGREGATION
WHERE FK_FIGURE_ID =30122
AND FK_FACTORY_ID =A
AND LK_REPORTING_PERIOD =B
AND GRANULARITY_TYPE_TXT=C
AND GRANULAROTY_LEVEL_TXT=D
AND FK_CONDITION_ID =E
) B ;
RETURN CAL_VALUE;
END AGG_NC8B_FN;