Побитовые операции
Побитовые операции
Подскажите плз как записать операцию типа x=x & ~ 16 в WHERE.
С первым понятно BIN_AND, а как быть с отрицанием?
С первым понятно BIN_AND, а как быть с отрицанием?
Re: Побитовые операции
x = bin_and(x, bin_xor(16, -1))
Re: Побитовые операции
Большое СПАСИБО!!!
Re: Побитовые операции
Выяснилось, что в WHERE это не работает в лоб, и пишет, что выражения в этих функциях недопустимы. Требуются небольшие танцы с бубном, в отличие от других RDBMS....
Хотя чисто если сделать SELECT, то всё выдаёт нормально, но в хранимой процедуре никак.
Хотя чисто если сделать SELECT, то всё выдаёт нормально, но в хранимой процедуре никак.
Re: Побитовые операции
Что именно не работает, покажешь?
Re: Побитовые операции
В хранимой процедуре я был вынужден сделать так:
negFlags=BIN_XOR(1,-1);
tmpFlags=BIN_AND(:tmpFlags,:negFlags);
UPDATE objQual_Topic
SET "Flags" = :tmpFlags
WHERE "TopicID" = :i_TopicID;
Но так не работает:
UPDATE objQual_Topic
SET "Flags" = :tmpFlags
WHERE "TopicID" = BIN_AND(:tmpFlags,BIN_XOR(1,-1));
У меня есть есть такие куски, которые возвращают набор строк из SELECT и там используются поля и там я сделал обработку в блоке DO BEGIN ... END.
Иначе ошибка при сохранении процедуры. В SELECT чисто как отдельный запрос всё работает. Подозреваю проблемы с PSQL.
Пока я тестировал этот кусок с Firebird 2.1.2. Но в данном случае как я понимаю код базы в обоих случаях аналогичен.
negFlags=BIN_XOR(1,-1);
tmpFlags=BIN_AND(:tmpFlags,:negFlags);
UPDATE objQual_Topic
SET "Flags" = :tmpFlags
WHERE "TopicID" = :i_TopicID;
Но так не работает:
UPDATE objQual_Topic
SET "Flags" = :tmpFlags
WHERE "TopicID" = BIN_AND(:tmpFlags,BIN_XOR(1,-1));
У меня есть есть такие куски, которые возвращают набор строк из SELECT и там используются поля и там я сделал обработку в блоке DO BEGIN ... END.
Иначе ошибка при сохранении процедуры. В SELECT чисто как отдельный запрос всё работает. Подозреваю проблемы с PSQL.
Пока я тестировал этот кусок с Firebird 2.1.2. Но в данном случае как я понимаю код базы в обоих случаях аналогичен.
Re: Побитовые операции
Вероятно, ты запутался в типах переменных. Смотри, что INT и BIGINT - разные.