作成した関数のパラメータを 'Where'句のSQL * Plusの 'Select'文に渡すときに問題があります。しかし、私が利用した構文は、この 'Where'節の状況では間違っているか全く使われていないようです。SQL * PlusでFunctionから 'Select' stmtにパラメータ(値)を渡す/コールする方法は?
ここに私が作成した私の関数であり、それがコンパイルされてOKに見えると良い走っ:また
CREATE OR REPLACE FUNCTION SA_BILL_CNTRL_EXTRNL_FXN(p_client_code VARCHAR2
,p_bill_seq VARCHAR2
,p_bill_control_seq VARCHAR2)
RETURN VARCHAR2 IS
v_external_id VARCHAR2(30);
v_client_code VARCHAR2(4) := p_client_code;
v_bill_seq NUMBER := to_number(p_bill_seq);
v_bill_control_seq NUMBER := to_number(p_bill_control_seq);
v_cnt NUMBER;
BEGIN
SELECT COUNT(*)
INTO v_cnt
FROM [email protected]_SAREP bc
WHERE bc."ExternalID" IS NOT NULL
AND bc."ExternalID" != ''
AND bc."ClientCode" = p_client_code
AND bc."BillControlSeq" = v_bill_control_seq
AND bc."BillSeq" = v_bill_seq;
IF v_cnt = 1 THEN
SELECT bc."ExternalID"
INTO v_external_id
FROM [email protected]_SAREP bc
WHERE bc."ExternalID" IS NOT NULL
AND bc."ExternalID" != ''
AND bc."ClientCode" = p_client_code
AND bc."BillControlSeq" = v_bill_control_seq
AND bc."BillSeq" = v_bill_seq;
ELSE
v_external_id := NULL;
END IF;
RETURN v_external_id;
END SA_BILL_CNTRL_EXTRNL_FNX;
/
、私はそれを実行した後に失敗した関数のパラメータ「OUT IN」を使用する場合。私は自分自身を徹底的にperflexed残っていた最後の2日間
SELECT NVL(TRIM(eb.CASE_NUM_REEVALUATED), TRIM(eb.CASE_NUM_DUPLICATED)) CaseNumReev
,gnc.BILL_CONTROL_SEQ
FROM EPE_Bill eb NETWORK_CROSSWALK gnc
WHERE substr(eb.MIC_BILL_ID, 5, 4) = SA_BILL_CNTRL_EXTRNL_FNX(p_client_code)
AND gnc.BILL_CONTROL_SEQ = SA_BILL_CNTRL_EXTRNL_FNX(p_bill_seq)
AND (to_number(substr(eb.MIC_BILL_ID, 10, 10), '9999999999') = SA_BILL_CNTRL_EXTRNL_FNX(p_bill_control_seq)
GROUP BY CaseNumReev, gnc.BILL_CONTROL_SEQ;
:
は今、ここに私は苦労してパラメータを渡すを抱えている「を選択」ステートメントです。 これで、私が問題を手伝ってくれたら本当に感謝しています。
おかげで再び...
あなたの関数は3つのパラメータ(デフォルトはありません)をとりますが、あなたは1だけで呼び出していますが、これは無効です。 –
あなたはどんな具体的なエラーがありますか?また、投稿されたコードに関数名のタイプミスがあります。作成時にはSA_BILL_CNTRL_EXTRNL_FXN、where句にはSA_BILL_CNTRL_EXTRNL_FNXがあります。 – DCookie
また、列別名を 'group by 'することもできません。 who 'nvl'句を繰り返す必要があります(または別の選択肢をラップしてください)。既に発見したように、通常のSQLから 'in out'パラメータを持つ関数を呼び出すことはできません。 –