Oracle-Использование дополнительных параметров в функции? - PullRequest
1 голос
/ 27 сентября 2019

Я хочу добавить не более трех необязательных параметров в мою функцию Oracle с именем TEST.Возвращаемое значение должно быть 2. Как изменить мою функцию, чтобы эти запросы работали самым простым способом?

SELECT TEST('eq1','md1') TEST0 FROM DUAL; -- Shows 2 correctly    
--How to make these queries also work?
SELECT TEST('eq1','md1','c1') TEST1 FROM DUAL;
SELECT TEST('eq1','md1','c1','d1') TEST2 FROM DUAL;
SELECT TEST('eq1','md1','c1','d1','e1') TEST3 FROM DUAL;

Таблица и функция такие, как показано ниже.

Таблица, как показано ниже

CREATE TABLE T5 (
COL1 VARCHAR2(10),
COL2 VARCHAR2(10),
COL3 VARCHAR2(10),
COL4 VARCHAR2(10),
COL5 VARCHAR2(10),
VAL VARCHAR2(10)
);
INSERT INTO T5  VALUES ('eq1','md1','c1','d1','e1','2');
INSERT INTO T5  VALUES ('eq2','md2','c2','d2','e2','5');
INSERT INTO T5  VALUES ('eq3','md3','c3','d3','e3','3');

Моя функция,

CREATE OR REPLACE FUNCTION TEST
(p1 IN VARCHAR2,
 p2 IN VARCHAR2
                  --How to add optional parameter p3?
                  --How to add optional parameter p4?
                  --How to add optional parameter p5?
)
RETURN NUMBER AS V_VALUE VARCHAR2(10);
BEGIN
SELECT(
    SELECT VAL  FROM T5
    WHERE COL1 = p1
    AND COL2 = p2
                  --How to add constraint COL3=p3?
                  --How to add constraint COL4=p4?
                  --How to add constraint COL5=p5?                      
    )
INTO V_VALUE
FROM DUAL;    
RETURN V_VALUE;
END;
/

1 Ответ

2 голосов
/ 27 сентября 2019

Вам нужно определить значение default и все.

Ваш код функции должен выглядеть следующим образом:

CREATE OR REPLACE FUNCTION TEST (
    P1   IN   VARCHAR2,
    P2   IN   VARCHAR2,
    P3   IN   VARCHAR2 DEFAULT NULL,
    P4   IN   VARCHAR2 DEFAULT NULL,
    P5   IN   VARCHAR2 DEFAULT NULL
) RETURN NUMBER AS
    V_VALUE   VARCHAR2(10);
BEGIN
    SELECT
        (
            SELECT
                VAL
            FROM
                T5
            WHERE
                COL1 = P1
                AND COL2 = P2
                AND COL3 = COALESCE(P3, COL3)
                AND COL4 = COALESCE(P4, COL4)
                AND COL5 = COALESCE(P5, COL5)
        )
    INTO V_VALUE
    FROM
        DUAL;

    RETURN V_VALUE;
END TEST;
/

Теперь все запросы будут выполняться:

SELECT TEST('eq1','md1') TEST0 FROM DUAL;
SELECT TEST('eq1','md1','c1') TEST1 FROM DUAL;
SELECT TEST('eq1','md1','c1','d1') TEST2 FROM DUAL;
SELECT TEST('eq1','md1','c1','d1','e1') TEST3 FROM DUAL;

Но, пожалуйста, убедитесь, что order переданного параметра в function не нарушен.Вы не можете передать P5 без передачи значения параметра P4, за исключением того, что имена параметров используются при вызове функции.

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...