Можно ли выполнить побитовую групповую функцию?

У меня есть поле в таблице, которая содержит побитовые флаги. Допустим, для примера есть три флага:4 => read, 2 => write, 1 => execute и таблица выглядит так*:

  user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)

Я заинтересован, чтобы найти всех пользователей, у которых установлен определенный флаг (например: запись) в ЛЮБОЙ записи. Чтобы сделать это в одном запросе, я решил, что, если бы вы ИЛИ соединили все разрешения пользователя вместе, вы бы получили одно значение, которое является «общей суммой» их разрешений:

  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

*Моя фактическая таблица не связана с файлами или правами доступа к файлам, это пример

Есть ли способ, которым я мог бы выполнить это в одном утверждении? На мой взгляд, это очень похоже на обычную агрегатную функцию с GROUP BY:

SELECT user_id, SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

... но, очевидно, какая-то магическая "побитовая или" функция вместо СУММЫ. Кто-нибудь знает что-нибудь подобное?

(А для бонусных баллов это работает в оракуле?)

Ответы на вопрос(5)

Ваш ответ на вопрос