Возвращая логическое значение как выходной параметр из хранимой процедуры? - PullRequest
0 голосов
/ 03 мая 2018

Это правильный способ вернуть логическое значение в качестве выходного параметра из процедуры сохранения? Чтобы вернуть true, если все прошло нормально, или вызвать исключение при возникновении ошибки.

PROCEDURE STUFF (VAL1 IN NUMBER, VAL2 IN NUMBER, RESULT OUT BOOLEAN)
IS
BEGIN
    INSERT INTO TABLE_1 (A_COLUMN) VALUES (VAL1);
    INSERT INTO TABLE_2 (B_COLUMN) VALUES (VAL2);
    COMMIT;
    RESULT := TRUE;
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
//Do stuff;
RAISE;
END;

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я бы сделал еще один шаг и предложил бы, чтобы вы не"скрывали" исключение, а затем возвращали вместо него код состояния, будь то целое число, строка или логическое значение.

Вместо этого положитесь на поток распространения ошибок по умолчанию PL / SQL и исключения документов, которые могут возникнуть в вашей программе.

0 голосов
/ 03 мая 2018

Должно быть хорошо, если вы используете его правильно. Также рекомендуется использовать %TYPE для параметров, которые ссылаются на столбцы.

DECLARE 
    v_result BOOLEAN; 
    PROCEDURE Stuff (val1   IN table_1.a_column%TYPE, 
                     val2   IN table_2.b_column%TYPE, 
                     result OUT BOOLEAN) 
    IS 
    BEGIN 
        INSERT INTO table_1 (a_column) VALUES (val1); 
        INSERT INTO table_2 (b_column) VALUES (val2); 

        COMMIT; 

        result := TRUE; 
    EXCEPTION 
      WHEN OTHERS THEN 
                 ROLLBACK; 

                 --Do stuff; 
                 RAISE; 
    END; 
BEGIN 
    Stuff(1, 2, v_result); 

    IF v_result THEN 
      dbms_output.put_line('SUCCESS'); 
    -- Do other stuff 
    END IF; 
END; 

/ 

SUCCESS
...