1. SQL / Говнокод #13059

    −172

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    CREATE OR REPLACE TRIGGER trig1
    BEFORE INSERT
    ON tab1 
    REFERENCING NEW AS new OLD AS old
    FOR EACH ROW
    DECLARE
      tmpVar tab1.budat%TYPE;
      v_cd   tab2.cd%TYPE;
    BEGIN
      tmpVar := to_char(sysdate-1, 'YYYYMMDD');
      SELECT f_get_code INTO v_cd FROM dual;
    
      IF v_cd = 'C1' THEN
        :new.budat := tmpVar;
      END IF;
    END trig1;

    Ну почему?
    Ну почему не просто

    IF f_get_code = 'C1' THEN
    :new.budat := to_char(sysdate-1, 'YYYYMMDD');
    END IF;

    Запостил: slbsomeone, 28 Мая 2013

    Комментарии (5) RSS

    • Потому что тогда budat слишком просто.
      Ответить
    • Ну как же Вы не понимаете...
      А если в момент выполнения триггера без 1 микросекунды до 00:00 следующего дня?
      На IF потратиться эта самая микросекунда и в таблицу пойдет уже новый день!
      Ответить
    • Если f_get_cod вернёт NO_DATA_FOUND, то v_cd == null.
      Извращённый способ борьбы с исключениями :)
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий