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

    −864

    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
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    select
    	distinct q.subject as subject,
    	q.notification_body as notification_body,
    	q.record_id as notification_id,
    	q.notif_type as notification_type,
    	pkgxyz.sql_queue_addr_set_status(a.record_id, 4)
    from
    	NOTIF_QUEUE q,
    	NOTIF_QUEUE_address a 
    where 
    	q.transport = 1234567890 and q.status = 1 and q.record_id = a.notification_id and a.status = 1;
    	
    	
      function sql_queue_addr_set_status(pRecord_id number, pValue number) return int as
        pragma autonomous_transaction;
      begin
        Trace('sql_queue_addr_set_status', '[pRecord_id='||pRecord_id||', pValue='||pValue||'] start');
        update notif_queue_address a
          set a.status = pValue
          where a.record_id = pRecord_id;
        commit;
        Trace('sql_queue_addr_set_status', '[]end');
        return 1;
      end;

    "У нас есть только один шанс получить эти данные" - как бы говорит нам этот кусок г.. кусок кода.
    В селекте (строки 1-11) мы получаем данные, и сразу вызываем хранимую процедуру (строки 14-24), которая изменяет выбранные данные. Если запустим этот запрос ещё раз, то он ничего не вернёт.

    Имена и айдишники изменены, что бы не выдать компанию, в которой это написано.

    Запостил: red_falcon, 04 Февраля 2011

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

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