1

渡された列に応じて、さまざまな方法で作業したい関数があります。UPDATE ステートメントでその関数を呼び出しています。テーブルの列 A を渡すと関数の case1 を実装する必要があり、列 B を渡すと関数の case2 部分を考慮する必要があります。

2 つの個別の機能を作成できますが、可能であれば 1 つの機能で実現したいと考えています。

例えば:

create or replace Function test( para1 in varchar2)
v_para varchar2;
BEGIN
****If  paramater is coming from col A then perform 1st block Else perform 2nd block****
Begin

v_para := REGEXP_REPLACE (para1,'....');
v_para := .....
v_para := .....
Return varchar2
END
------------------------------------------------------
BEGIN
v_para := REGEXP_REPLACE(para1,'.....');
v_para := .....

Return varchar2
END

END;
4

2 に答える 2

1

もう 1 つの方法は、次のように名前で渡す 2 つの引数を持ち、どちらもデフォルトで NULL にすることです。

CREATE OR REPLACE PROCEDURE TEST_PROC(colA  VARCHAR2 DEFAULT NULL,
                                      colB  VARCHAR2 DEFAULT NULL) IS
BEGIN
  IF colA IS NOT NULL THEN
    DBMS_OUTPUT.PUT_LINE('colA=' || colA);  -- or do whatever
  END IF;

  IF colB IS NOT NULL THEN
    DBMS_OUTPUT.PUT_LINE('colB=' || colB);  -- or do whatever
  END IF;
END TEST_PROC;

次に、このプロシージャを呼び出すときに、次のように、使用する引数を名前で渡します。

DECLARE
  rowTest_table  TEST_TABLE%ROWTYPE;
BEGIN
  SELECT *
    INTO rowTest_table
    FROM TEST_TABLE
    WHERE SOMETHING = SOMETHING_ELSE;

  TEST_PROC(colA => rowTest_table.A);

  TEST_PROC(colB => rowTest_table.B);
END;

共有してお楽しみください。

于 2013-04-17T02:05:46.870 に答える