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

    −113

    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
    with mycte as
    (
    
    select dateadd(dd, 1,@dato1)as  Dato
    
    union all
    select Dato + 1
    from    mycte    
    where   Dato + 1 <= @dato2
    )
    select count(Dato) as antall
    from    mycte
    where Dato <=@dato2
    OPTION (MAXRECURSION 0)

    Суровые нордические ребята пытаются найти разницу в днях между двумя датами с помощью рекурсии.
    И ведь dateadd они знают, а про datediff нет.
    Так же веселит OPTION (MAXRECURSION 0), который обычно устанавливают с параметром отличным от 0 в тех случаях, когда рекурсия убегает в бесконечность, чтобы хоть как-то ограничить ее. Видимо, эхо дебаггинга сего замечательного кода.

    DBdev, 23 Января 2012

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

    −129

    1. 1
    SELECT COUNT(*)  FROM passwords WHERE program=program AND website=website AND login=login AND password=password

    Okay :(

    TBoolean, 12 Января 2012

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

    −113

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    select o.*
    from (select rownum rw
               , o.*
          from (select o.* from all_tables o order by table_name) o
          where rownum < 20
         ) o
    where o.rw >= 10;

    Стандартный аналог "LIMIT 9,10" в Oracle.
    http://www.sql.ru/faq/faq_topic.aspx?fid=171

    huitka, 12 Января 2012

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

    −108

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    update People
             set PeopleIsJunior='N'
           where PeopleIsJunior='Y'
             and month(BirthDay)=(select month(getdate()))
             and year(BirthDay)=(select year(getdate())-18) 
             and day(BirthDay)=(select day(getdate()))

    Еженочно часа 3 делаем людей совершеннолетними. людей много , миллионы, и с табличкой активно работают.
    Наличие индекса по BirthDay не играет никакого рояля, т.к. функции.
    t-sql если чо.

    bliznezz, 06 Января 2012

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

    −103

    1. 1
    вайп

    TarasGovno, 04 Января 2012

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

    −109

    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
    end;
    create or replace package body "MUT_TABLE" is
    type a_table is table of number index by pls_integer;
    position a_table;
    empty a_table;
    
    procedure SET_INITIAL_STATE
    as
    begin
    position:=empty;
    end SET_INITIAL_STATE;
    
    procedure BEF_TR( ID IN NUMBER, A IN NUMBER)
    as
    
    begin
    
    position (ID):= A;
    
    end BEF_TR;
    
    procedure AFT_TR
    is
    v number;
    
    begin
    v:=position.FIRST;
    while v is not null loop
    
    update A set
    A=1,
    B='!!!!!!!!!'
    where A = 1;
    v:= position.next(v); 
    end loop;
    
    end AFT_TR;
    
    end "MUT_TABLE";

    kikis, 14 Декабря 2011

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

    −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
    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
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    CREATE TABLE "A" 
    ( "ID" NUMBER, 
    "A" NUMBER, 
    "B" VARCHAR2(20), 
    CONSTRAINT "A_PK" PRIMARY KEY ("ID") ENABLE
    )
    /
    
    CREATE OR REPLACE TRIGGER "A_2" 
    AFTER
    insert or update on "A"
    for each row
    begin
    
    mut_table.bef_tr(:NEW.ID,:NEW.A);
    
    end;
    /
    ALTER TRIGGER "A_2" ENABLE
    /
    
    CREATE OR REPLACE TRIGGER "A_3" 
    AFTER
    insert on "A"
    declare
    b number;
    
    begin
    mut_table.aft_tr;
    end;
    /
    ALTER TRIGGER "A_3" ENABLE
    /
    
    CREATE OR REPLACE TRIGGER "A_AT" 
    BEFORE
    insert or update on "A"
    for each row
    declare 
    v number;
    PRAGMA AUTONOMOUS_TRANSACTION;
    begin
    
    :NEW.A:=:NEW.A+1;
    :NEW.B:='!!!!!!!!!!';
    
    commit;
    
    end;
    /
    ALTER TRIGGER "A_AT" DISABLE
    /
    
    CREATE OR REPLACE TRIGGER "A_I_S" 
    BEFORE
    insert or update on "A"
    begin
    mut_table.set_initial_state;
    end;
    /
    ALTER TRIGGER "A_I_S" ENABLE
    /
    
    CREATE OR REPLACE TRIGGER "A_T1" 
    BEFORE
    insert or update on "A"
    for each row
    
    begin
    
    update A set 
    A = :NEW.A+1,
    B = 'was incremented'
    where A = :NEW.A;
    end;
    /
    ALTER TRIGGER "A_T1" DISABLE
    /
    
    CREATE OR REPLACE TRIGGER "BI_A" 
    before insert on "A" 
    for each row 
    begin 
    if :NEW."ID" is null then 
    select "A_SEQ".nextval into :NEW."ID" from dual; 
    end if; 
    end; 
    
    /
    ALTER TRIGGER "BI_A" ENABLE
    /
    
    
    create or replace package MUT_TABLE as
    
    procedure set_initial_state;
    procedure bef_tr(ID number,A NUMBER);
    procedure aft_tr;

    kikis, 14 Декабря 2011

    Комментарии (2)
  8. 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)
  9. 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)
  10. 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)