• Как правильно составить запрос sql?

    MaxiMonster
    @MaxiMonster
    Грязно, можно оптимизировать:
    select t.grantee
      from (select grantee, count(grantee) as counts
              from dba_role_privs
             where grantee in
                   (select grantee
                      from dba_role_privs
                     where granted_role = 'PRESS'
                       and grantee in
                           (select grantee
                              from dba_role_privs
                             where granted_role = 'CONNECT'))
             group by grantee) t
     where t.counts = 2
    Ответ написан
    7 комментариев
  • Как создать процедуру с запросами на SQL?

    Ну вот что-то вроде этого:
    /*
    Входные параметры:
    @DistrinctName - название района
    @NewFIO - новые ФИО главы
    
    таблица District например содержит поля название района и ФИО главы
    
    Коды возврата процедуры:
    0 -Штатное завершение (процедура отработала нормально)
    -1000 - не указано (или пустое) название района
    -1001 - не указано (или пустое) новое имя главы
    -1002 - района с таким названием не существует
    */
    
    create procedure dbo.upd_FIO
      @DistrinctName varchar(150)
    , @NewFIO varchar(1024)
    as
    begin
    if isnull(@DistrictName, '') = ''
      return -1000
    
    if isnull(@NewFIO, '') = ''
      return -1001
    
    if not exists (select top 1 1 from District where DistrictName = @DistrictName)
      return -1002
    
    update District set FIO = @NewFIO
    where DistrictName = @DistrictName 
    
    return 0
    end
    Ответ написан
    Комментировать
  • Сложное задание на собеседовании

    @Slko
    C++/C#/Python Developer
    Вопрос немножко некорректен. 32-битность здесь большой роли не играет (важно только, чтобы архитектура не была 8-битной, где длина типа int может быть равна длине типа char, но всё равно это тоже некорректно, т.к. размеры типов не зависят от разрядности архитектуры, надо было указывать разрядность типа int), роль играет порядок байт.
    Если little-endian (интеловский порядок), то в c помещается наименьший значащий байт числа, т.е. это эквивалентно x % 256.
    Если big-endian, то в c помещается наибольший значащий байт числа, т.е. это эквивалентно x >> 24 (для 32-битной архитектуры).
    Соответственно, для little-endian эта операция над числом 1 вернёт 1, для big-endian - 0.
    Двойной знак вопроса использовался в C (где нет типа bool) для нормализации значения (!!x эквивалентно x > 0 ? 1 : 0).
    В C++ ! возвращает bool, а результат двойного применения отрицания это, по сути, преобразование типа исходного значения к bool (!!x эквивалентно (bool)x).
    В любом случае, суть последнего выражения - возврат true/1, если архитектура little-endian, а иначе - false/0.
    То есть назвать эту функцию можно было IsLittleEndian().
    Ответ написан
    6 комментариев