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

    −861

    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    /* Ask Dian for changing this enormous DECODE */
          sprintf( ranges_sort_condition,
                   "DECODE(CONTRACT_ID, '%s', 1, 0) + "
                   "DECODE(ISS_INST, '%s', 2, 0) + "
                   "DECODE(ACQ_INST, '%s', 4, 0) + "
                   "DECODE(ISS_BIN, '%s', 8, 0) + "
                   "DECODE(TERM_TYPE, %d, 16, 0) + "
                   "DECODE(IS_PRIMARY_CARD, %d, 32, 0), "
                   "  0,  1,  64,  2,  32,  3,  16,  4,   4,  5,   8,  6,  96,  7,  80,  8,"
                   " 68,  9,  72, 10,  40, 11,  24, 12,  12, 13,   2, 14,  10, 15,  48, 16,"
                   " 36, 17, 104, 18,  88, 19,  76, 20,  66, 21,  74, 22, 112, 23, 100, 24,"
                   " 56, 25,  44, 26,  34, 27,  42, 28,  20, 29,  28, 30,  18, 31,   6, 32,"
                   " 26, 33,  14, 34,  52, 35,  60, 36, 124, 37,  50, 38,  38, 39,  22, 40,"
                   "118, 41, 122, 42, 110, 43,  94, 44, 126, 45,   1, 46,  65, 47,  97, 48,"
                   " 81, 49,   5, 50,  73, 51, 105, 52,  89, 53,  77, 54,  67, 55,  75, 56,"
                   "113, 57, 121, 58, 101, 59, 109, 60,  99, 61, 107, 62,  85, 63,  93, 64,"
                   " 83, 65,  71, 66,  91, 67,  79, 68, 117, 69, 125, 70, 115, 71, 103, 72,"
                   " 87, 73, 119, 74,  59, 75,  47, 76,  95, 77,  63, 78, 127, 79, 999",
                   "-1", DEFAULT_INST_ID, DEFAULT_INST_ID, "-1", TERM_TYPE_DEF, IS_PRIMARY_DEF );
    
          ora_sql_stmt_buff.len = sprintf( (char*)ora_sql_stmt_buff.arr, 
                                           "SELECT ACQ_INST, "
                                           "       ISS_INST, "
                                           "       ISS_BIN,  "
                                           "       TERM_TYPE, "
                                           "       MSGTYPE,  "
                                           "       TASK,     "
                                           "       REVERSAL, "
                                           "       CONTRACT_ID, "
                                           "       IS_PRIMARY_CARD, "
                                           "       TMPL_ID   "
                                           "  FROM T_TRANS_AUTH_ALG "
                                           " WHERE TRANS_TYPE = :ora_trans_type "
                                           " ORDER BY DECODE(%s)", ranges_sort_condition );

    Это хоть и на Си, но формирование запроса SQL, так что попадает сюда.
    Хоть бы комментарий какой написали, демоны!

    nil, 26 Июля 2010

    Комментарии (3)
  2. SQL / Говнокод #3739

    −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
    -- Процедура предназначена для выделения часов из времени
    CREATE PROCEDURE _hour(
    	_date_time	DATETIME YEAR TO SECOND DEFAULT NULL
    )RETURNING INTEGER;
    
    DEFINE _str	CHAR(20);
    
    IF _date_time IS NULL THEN
    	LET _date_time = CURRENT;
    END IF;
    
    LET _str = _date_time;
    LET _str = SUBSTR(_str,12,2);
    
    RETURN _str;
    
    END PROCEDURE;

    СУБД infomix
    а ведь можно сделать так
    CAST(CURRENT AS DATETIME HOUR TO HOUR)
    или так
    EXTEND(CURRENT, HOUR TO HOUR)

    и таких перлов с вычислением дат тьма тьмущая

    Grizzly, 20 Июля 2010

    Комментарии (2)
  3. SQL / Говнокод #3723

    −866

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    sBigDad	    varchar2(200) := '';
    vaKids		ids_va	:= ids_va();
    vaDads		ids_va	:= ids_va();
    vaBigDads	ids_va	:= ids_va();
    vaGrandKids	ids_va	:= ids_va();
    vaTempKids	ids_va	:= ids_va();

    borka, 17 Июля 2010

    Комментарии (6)
  4. SQL / Говнокод #3691

    −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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    Гавнокод --
    
    SELECT * FROM  Table1
    WHERE [Id] not in 
    		(
    		SELECT min([Id]) FROM Table1
    		WHERE [Code] in 
    				(
    				SELECT [Code] FROM Table1
    				GROUP BY [Code]									HAVING count([Code]) > 1
    				)
    					GROUP BY [Code]
    		)
    	and [Id] in 
    		(
    				SELECT [Id] FROM Table1
    				WHERE [Code] in (
    						SELECT [Code] FROM Table1
    						GROUP BY [Code]
    						HAVING count([Code]) > 1
    						)
    		)
    
    
    Нормальний варіант --
    
    SELECT * FROM Table1 AS a
    WHERE [Id] not in 
    		(
    			SELECT min([Id]) FROM a_ListParam
    			WHERE a_ListParam.[Code] = a.[Code]
    		)

    O_O, 12 Июля 2010

    Комментарии (5)
  5. SQL / Говнокод #3615

    −858

    1. 1
    IF ((SELECT 1 FROM DELETED AS D INNER JOIN INSERTED AS I ON (I.[id_Status]=D.[id_Status])) IS NULL )

    такий от тригер стоїть на апдейт однієї таблички ...
    ось так -- IF Insertes.id_Status != Deleted.Id_Status було б значно краще і лаконічніше.

    O_O, 01 Июля 2010

    Комментарии (21)
  6. SQL / Говнокод #3611

    −179

    1. 1
    SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(LTRIM('  850.0000'),'0',' ')),' ','0'),'.',' ')),' ','.')

    Совет, как убрать лишние нули после точки

    Back, 01 Июля 2010

    Комментарии (8)
  7. SQL / Говнокод #3604

    −874

    1. 1
    SELECT created_at, updated_at FROM user_childs WHERE `id`=.......

    убейте меня за таймштамп user_childs.crated_at

    piroman171, 30 Июня 2010

    Комментарии (12)
  8. SQL / Говнокод #3546

    −857

    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
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    procedure xxx_procedure
    is
    --   lngIDVidPP Number;
       sSQL       varchar2(4000);
    begin
    sSQL := '';
    sSQL := sSQL || ' Declare ';
    sSQL := sSQL || '    lngIDVidPP Number; ';
    sSQL := sSQL || '    lngColRec  Number; ';
    sSQL := sSQL || '    strTypeProc Varchar2(255); ';
    sSQL := sSQL || ' BEGIN ';
    sSQL := sSQL || ' for rec in (select f.param2 , A.idpp, pp.crastr, pp.cvector, a.param1, a.et, a.tet ';
    sSQL := sSQL || '  from table1 e, T_IDPP@' || 'app' || '_' ||'xxx' || ' a, table2 f, ';
    sSQL := sSQL || '   t_pp_card@' || 'app' || '_' || 'xxx' || ' pp,  refitem r';
    sSQL := sSQL || '  where ';
    sSQL := sSQL || '   e.param1 = a.param1 ';
    sSQL := sSQL || '   and e.id_building = F.ID_BUILDING ';
    sSQL := sSQL || '   and F.FLOOR_NUMBER = a.et ';
    sSQL := sSQL || '   and R.REFERENCEID = 2019 and R.ITEMID = F.ID_FLOOR_TYPE';
    sSQL := sSQL || '   and R.CODE = a.tet';
    sSQL := sSQL || '   and a.idpp = pp.cidpp)';
    sSQL := sSQL || '  loop ';
    sSQL := sSQL || '     lngColRec := 0; ';
    sSQL := sSQL || '     lngIDVidPP := 0; ';
    sSQL := sSQL || '     SELECT COUNT(*) INTO lngColRec FROM T_PROCESS_PP@' || 'app' || '_' || 'xxx || ' Z ';
    sSQL := sSQL || '                     WHERE Z.PPP_UNOM = rec.param1 AND Z.PPP_ET = rec.et AND Z.PPP_TET = rec.tet; ';
    sSQL := sSQL || '     if lngColRec = 0 then ';
    sSQL := sSQL || '        if BITAND(rec.crastr, 8) <> 0 and BITAND(rec.cvector, 8) <> 0 then ';
    sSQL := sSQL || '           lngIDVidPP := 50868; ';
    sSQL := sSQL || '        else ';
    sSQL := sSQL || '           if BITAND(rec.crastr, 8) <> 0 then ';
    sSQL := sSQL || '              lngIDVidPP := 50866; ';
    sSQL := sSQL || '           else ';
    sSQL := sSQL || '              lngIDVidPP := 50867; ';
    sSQL := sSQL || '           end if; ';
    sSQL := sSQL || '        end if; ';
    sSQL := sSQL || '        update table2 f ';
    sSQL := sSQL || '            set f.xx      = rec.idpp, ';
    sSQL := sSQL || '                f.xxx   = lngIDVidPP, ';
    sSQL := sSQL || '                f.xxxx = 54554 ';
    sSQL := sSQL || '          where f.xxxxx = rec.id_floor; ';
    sSQL := sSQL || '     else  '; --if lngColRec > 0 then
    sSQL := sSQL || '          strTypeProc := Null; ';
    sSQL := sSQL || '          SELECT Y.PH_ACTION_KEY INTO strTypeProc ';
    sSQL := sSQL || '            FROM T_PROCESS_HEAD@' || 'app' || '_' || 'SGP' || ' Y ';
    sSQL := sSQL || '            WHERE ';
    sSQL := sSQL || '                 Y.PHID IN (SELECT X.PPP_PHID ';
    ...... 10 строк вырезано из-за ограничения 4000символов
    sSQL := sSQL || '               if BITAND(rec.crastr, 8) <> 0 and BITAND(rec.cvector, 8) <> 0 then ';
    sSQL := sSQL || '                  lngIDVidPP := 50868; ';
    sSQL := sSQL || '               else ';
    sSQL := sSQL || '                  if BITAND(rec.crastr, 8) <> 0 then ';
    sSQL := sSQL || '                     lngIDVidPP := 50866; ';
    sSQL := sSQL || '                  else ';
    sSQL := sSQL || '                     lngIDVidPP := 50867; ';
    sSQL := sSQL || '                  end if; ';
    sSQL := sSQL || '               end if; ';
    sSQL := sSQL || '                  update table3 f ';
    sSQL := sSQL || '                     set f.ID_PLANE_G = rec.idpp, ';
    sSQL := sSQL || '                     f.id_plane_scan = lngIDVidPP, ';
    sSQL := sSQL || '                     f.id_status_plane = 54552 ';
    sSQL := sSQL || '               where f.param1 = rec.param1; ';
    sSQL := sSQL || '           ELSE ';
    sSQL := sSQL || '                  update table3 f ';
    sSQL := sSQL || '                 set f.id_status_plane = 54552 ';
    sSQL := sSQL || '               where f.param1 = rec.param1; ';
    sSQL := sSQL || '           END IF; ';
    sSQL := sSQL || '     end if; ';  --if lngColRec > 0 then
    sSQL := sSQL || '   end loop;';
    sSQL := sSQL || '  null;';
    sSQL := sSQL || '  end;';
    
    EXECUTE IMMEDIATE sSQL;
            dbms_output.put_line ('Процедура xxx_procedure успешно создана');
    EXCEPTION
      WHEN OTHERS THEN dbms_output.put_line('Ошибка создания xxx_procedure. ' || SQLERRM);
    end;

    В связи с NDA названия изменены.

    kamapcuc, 23 Июня 2010

    Комментарии (98)
  9. SQL / Говнокод #3541

    −862

    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
    SELECT wine_name,wine_year,cost FROM Wines 
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN pricelist ON storage.wine_ID=pricelist.wine_ID
    WHERE fabric_ID=(SELECT fabric_ID FROM fabrics WHERE Name="Toscana Italy")
    AND count>0 ORDER BY wine_year ASC LIMIT 1,1000;
    
    SELECT wine_name,cost,count FROM wines
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN vendorprices ON storage.wine_ID=vendorprices.wine_ID
    WHERE count > 0 ORDER BY wine_name DESC LIMIT 1,1000;
    
    SELECT wine_name,cost,count FROM wines
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN vendorprices ON storage.wine_ID=vendorprices.wine_ID
    WHERE count = 0 ORDER BY wine_name DESC LIMIT 1,1000;

    Извращаюсь как могу лишь бы запросы напоминали двух-критериальные. Впрочем таковыми они от этого не становятся. Думаю еще добавить по три-четыре подзапроса и побольше джойнов, жаль условных конструкций не знаю(собственно сутки-двое изучаю SQL)
    Институт сказал "Надо", студент ответил... ну впрочем неважно что ответил, но сделал...

    Ivan0x32, 23 Июня 2010

    Комментарии (14)
  10. SQL / Говнокод #3513

    −857

    1. 1
    2. 2
    SELECT CONCAT( IF(10>DAY(date),"0",""),DAY(date),".",IF(10>MONTH(date),"0",""),MONTH(date)) as date
    FROM table_name

    Выборка дат из mysql в нормальном виде))

    Aligan, 19 Июня 2010

    Комментарии (2)