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

    −114

    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
    -- Я ТУТ ИСПОЛЬЗУЮ 2 КУРСОРА, 
    -- причем 2рой вызывается изнутри первого, 
    -- причем этот 2рой курсор ПОЛНОСТЬЮ (в худшем случае) 
    -- перебирает все свои значения, чтобы подставить одно.
    
    -- ВОПРОС: как сделать так, чтоб работало так же, но чтоб не так яро грузилось???
    
    DECLARE 
      CURSOR get_col1 IS
        SELECT DISTINCT 
    	a.constraint_name, 
      a.constraint_type,
      a.table_name,
      a.r_constraint_name,
      b.column_name
        FROM all_constraints a, all_cons_columns b
        WHERE a.table_name = b.table_name
      AND a.constraint_type in ('P', 'R')
      AND a.constraint_name = b.constraint_name
        ORDER by 1;
      
      CURSOR get_col2 IS
        SELECT constraint_name, table_name, column_name 
        FROM all_cons_columns
        WHERE constraint_name in 
              (select r_constraint_name 
               from all_constraints 
               where constraint_type = 'R');
        
    BEGIN
      dbms_output.ENABLE;
      dbms_output.put_line(rpad('Имя ограничения', 30)
                ||rpad('Тип', 5)
                ||rpad('Имя столбца', 30)
                ||rpad('Имя таблицы', 30)
                ||rpad('Имя таблицы', 30)
                ||rpad('Имя столбца', 30));
      dbms_output.put_line(rpad('-', 155, '-'));
      
      FOR main_col IN get_col1 LOOP
        dbms_output.put(rpad(to_char(main_col.constraint_name), 30)
          ||rpad(to_char(main_col.constraint_type), 5)
          ||rpad(to_char(main_col.column_name), 30)
          ||rpad(to_char(main_col.table_name), 30));
        
        IF (main_col.constraint_type = 'R') THEN
          
             FOR sec_col IN get_col2 LOOP
                  
                  IF (main_col.r_constraint_name = sec_col.constraint_name) THEN
                    
                    dbms_output.put(rpad(to_char(sec_col.table_name), 30)
                                       ||rpad(to_char(sec_col.column_name), 30));
                  END IF;
                  
             END LOOP;
        
        END IF;
        
        dbms_output.new_line();  
      END LOOP;
    END;
    /

    7. Используя сведения из представлений словаря данных получить
    информацию о первичных и внешних ключах схемы: Номер по порядку,
    Имя ограничения целостности, Тип, Имя столбца, Имя таблицы.
    Кроме того, для внешних ключей указать Имя таблицы и Имя столбца
    на которые ссылаются эти ключи.

    kikis, 13 Декабря 2011

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

    −120

    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
    CASE
    	WHEN plandata - begindata = 40000.000000 THEN 4
    	WHEN plandata - begindata = 1090000.000000 THEN 16
    	WHEN plandata - begindata = 2090000.000000 THEN 24
    	WHEN plandata - begindata = 90000.000000 THEN 8
    	WHEN plandata - begindata = 50000.000000 THEN 4
    	WHEN plandata - begindata = 20000.000000 THEN 2
    	WHEN plandata - begindata = 1070000.000000 THEN 14
    	WHEN plandata - begindata = 70000.000000 THEN 6
    	WHEN plandata - begindata = 3090000.000000 THEN 32
    	WHEN plandata - begindata = 4090000.000000 THEN 40
    	WHEN plandata - begindata = 5090000.000000 THEN 48
    	WHEN plandata - begindata = 6090000.000000 THEN 56 
    	WHEN plandata - begindata = 70000.000000 THEN 6
    	WHEN plandata - begindata = 10000.000000 THEN 1
    	WHEN plandata - begindata = 1040000.000000 THEN 12
    	WHEN plandata - begindata = 2040000.000000 THEN 20
    	WHEN plandata - begindata = 3040000.000000 THEN 28
    	WHEN plandata - begindata = 4040000.000000 THEN 36
    	WHEN plandata - begindata = 7040000.000000 THEN 44
    	WHEN plandata - begindata = 8040000.000000 THEN 52
    	WHEN plandata - begindata = 7090000.000000 THEN 48
    	WHEN plandata - begindata = 970000.000000 THEN 10
    	WHEN plandata - begindata = 100000.000000 THEN 9
    	WHEN plandata - begindata = 30000.000000 THEN 3
    END AS TIME

    Вычисляется плановое время выполнения задачи. begindata и plandata поля DATETIME, время начала и завершения операции

    dr_Lev, 11 Декабря 2011

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

    −114

    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
    DECLARE 
      CURSOR get_col1 IS
        SELECT DISTINCT 
    	a.constraint_name, 
      a.constraint_type,
      a.table_name,
      a.r_constraint_name,
      b.column_name
        FROM all_constraints a, all_cons_columns b
        WHERE a.table_name = b.table_name
      AND a.constraint_type in ('P', 'R')
      AND a.constraint_name = b.constraint_name
      --AND rownum < 20
        ORDER by 1;
      
      CURSOR get_col2 IS
        SELECT table_name, column_name 
        FROM all_cons_columns
        WHERE constraint_type = 'R';
        
    BEGIN
      dbms_output.ENABLE;
      dbms_output.put_line(rpad('Имя ограничения', 30)
                ||rpad('Тип', 5)
                ||rpad('Имя столбца', 20)
                ||rpad('Имя таблицы', 20)
                ||rpad('Имя таблицы', 20)
                ||rpad('Имя столбца', 20));
      dbms_output.put_line(rpad('-', 115, '-'));
      
      FOR main_col IN get_col1 LOOP
        dbms_output.put_line(rpad(to_char(main_col.constraint_name), 30)
          ||rpad(to_char(main_col.constraint_type), 5)
          ||rpad(to_char(main_col.column_name), 20)
          ||rpad(to_char(main_col.table_name), 20));
        
        /*IF (main_col.constraint_type = 'R') THEN
          dbms_output.put_line(lpad(rpad('Comment', 11), 37)||': '||main_col.comments);
        END IF;*/
        
        FOR sec_col IN get_col2 LOOP
          IF (main_col.constraint_type = 'R') THEN
            dbms_output.put_line(rpad('Index', 10)
            ||rpad('Index', 10)': '||ind_col.index_name);
          END IF;
        END LOOP;
        dbms_output.new_line();  
      END LOOP;
    END;
    /

    kikis, 09 Декабря 2011

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

    −121

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    SELECT DISTINCT
                  b.Id,
                  concat('<button type=""button"" onclick=""DeleteContact(', cast(b.Id as char), ')"">Delete...</button>') as lnkDelete
    FROM tblContact   b
    WHERE ....

    Вот так вот, оказывается, можно линк формировать....

    domovoy, 05 Декабря 2011

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

    −126

    1. 1
    2. 2
    3. 3
    AND (type = 2 OR type = 5 AND (type <> 3 OR type <> 20))
    
    Очередной перл предшественника :)

    labutinpa, 29 Ноября 2011

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

    −110

    1. 1
    2. 2
    3. 3
    CREATE INDEX "SCHEMANAME"."PLIN_DPINS_FK_I" ON "SCHEMANAME"."CLIENT_PLAN_INSTALMENTS" ("DPLNS_PLAN_ID", "DPOPT_OPTION_ID", "INSTALMENT_NUM");
    CREATE UNIQUE INDEX "SCHEMANAME"."PLIN_PK" ON "SCHEMANAME"."CLIENT_PLAN_INSTALMENTS" ("CLI_CLIENT_ID", "DPLNS_PLAN_ID", "DPOPT_OPTION_ID", "CLIPLN_PLAN_DATE", "CLIPLN_PLAN_TYPE", "INSTALMENT_NUM");
    CREATE UNIQUE INDEX "SCHEMANAME"."CLIPLN_PK" ON "SCHEMANAME"."CLIENT_PLAN" ("CLI_CLIENT_ID", "DPLNS_PLAN_ID", "DPOPT_OPTION_ID", "PLAN_DATE", "PLAN_TYPE");

    Реляционные? Не, не слышал.

    govnoguest, 24 Ноября 2011

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

    −108

    1. 1
    select 7-(8-datepart(weekday,getDate())) % 7

    Написал для конвертации дней недели начинающихся с SUNDAY=1, в привычные Пн-1, Вс-7

    3.14159265, 23 Ноября 2011

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

    −111

    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
    UPDATE  zayavlenie_tmp
        SET error    = 1,
            errorcod = 4
        FROM   zayavlenie_tmp
        WHERE  zayavlenie_tmp.error IS NULL
                    AND (rtrim(fam) = ''
                         OR LEN(ltrim(rtrim(fam))) < 2
                         OR fam LIKE '%0%'
                         OR fam LIKE '%1%'
                         OR fam LIKE '%2%'
                         OR fam LIKE '%3%'
                         OR fam LIKE '%4%'
                         OR fam LIKE '%5%'
                         OR fam LIKE '%6%'
                         OR fam LIKE '%7%'
                         OR fam LIKE '%8%'
                         OR fam LIKE '%9%'
    
    UPDATE  zayavlenie_tmp
        SET error    = 1,
            errorcod = 5
         FROM   zayavlenie_tmp
          WHERE  zayavlenie_tmp.error IS NULL
                    AND (rtrim(im) = ''
                         OR LEN(ltrim(rtrim(im))) < 2
                         OR im LIKE '%0%'
                         OR im LIKE '%1%'
                         OR im LIKE '%2%'
                         OR im LIKE '%3%'
                         OR im LIKE '%4%'
                         OR im LIKE '%5%'
                         OR im LIKE '%6%'
                         OR im LIKE '%7%'
                         OR im LIKE '%8%'
                         OR im LIKE '%9%'

    При импорте поля проверяются на соответствие (около 30 разнобразных правил). Хранимику писал мой начальнег :) Выкладываю УЖЕ немного исправленный для удобопонимания вариант, в исходнике таблицы еще зачем-то джойнились сами на себя. Всего в хранимике 50 (!!!) таких запросов, и каждый не менее эпичный )) Хотел исправить это хозяйство одним более-менее цивильным запросом, но где-то на половине у меня руки опустились

    spray07, 21 Ноября 2011

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

    −115

    1. 1
    SELECT id, login, 0 AS shows, 0 AS clicks, 0 AS money FROM users WHERE is_adv=1 AND is_blocked=0 AND (shows <> 0 AND clicks <> 0 AND money <> 0)

    peredozo, 07 Ноября 2011

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

    −108

    1. 1
    select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(t1.PART_NUMBER, '@i@', ' '),'@a@', '/'),'@@@', '\'),'@b@', ':'),'@c@', '*'),'@d@', '?'),'@e@', '"'),'@f@', '<'),'@g@', '>'),'@h@', '|'),'@j@', '&'),'@k@', ''''),'@l@', ',') as 'PART_NUMBER',.....

    edalalaeva, 02 Ноября 2011

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