Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Битовые операции в Oracle   Найти похожие ветки 

 
Ломброзо ©   (2006-05-12 15:12) [0]

Нужно обновить некое значение при помощи битовых операций OR и ANDNOT, навроде

UPDATE MYTABLE SET FIELD = FIELD OR FLAG;
UPDATE MYTABLE SET FIELD = FIELD AND NOT FLAG;

Встроенную функцию BITAND отыскал.

BITOR нашел в гугле:

CREATE OR REPLACE FUNCTION BITOR(A NUMBER, B NUMBER)
RETURN NUMBER IS
BEGIN
IF A IS NULL THEN
    RETURN B;
   END IF;
   IF B IS NULL THEN
    RETURN A;
   END IF;
 RETURN A - BITAND(A, B) + B;
END;


А вот как реализовать AND NOT - ума не приложу :)


 
sniknik ©   (2006-05-12 15:28) [1]

а разве там нет "нормальных" битовых операций?
по типу MSSQL
OR   - | или ^
AND - &
NOT - ~

в доки глянь, должны быть.


 
Ломброзо ©   (2006-05-12 15:29) [2]

обыскался, нету! :) только BITAND.


 
Desdechado ©   (2006-05-12 15:44) [3]

там есть классный пакетик utl_raw
применяя его, получаем
FUNCTION ascii_raw( p_raw IN VARCHAR2 )
 RETURN NUMBER DETERMINISTIC
AS
 nLen   NUMBER := Length( p_raw );
 result NUMBER := 0;
BEGIN
 FOR i IN 1..nLen LOOP
   result := result * 256 + ASCII( SubStr( p_raw, nLen - i + 1, 1 ) );
 END LOOP;
 RETURN( result );
END ascii_raw;
--
FUNCTION bit_and( p_dec1 IN NUMBER, p_dec2 IN NUMBER )
 RETURN VARCHAR2 DETERMINISTIC
AS
BEGIN
 RETURN ascii_raw( utl_raw.cast_to_varchar2( utl_raw.bit_and( raw_ascii( p_dec1 ),
                                                              raw_ascii( p_dec2 ) ) ) );
END bit_and;
---
FUNCTION bit_or( p_dec1 IN NUMBER, p_dec2 IN NUMBER )
 RETURN VARCHAR2 DETERMINISTIC
AS
BEGIN
 RETURN ascii_raw( utl_raw.cast_to_varchar2( utl_raw.bit_or( raw_ascii( p_dec1 ),
                                                             raw_ascii( p_dec2 ) ) ) );
END bit_or;
---
FUNCTION bit_xor( p_dec1 IN NUMBER, p_dec2 IN NUMBER )
 RETURN VARCHAR2 DETERMINISTIC
AS
BEGIN
 RETURN ascii_raw( utl_raw.cast_to_varchar2( utl_raw.bit_xor( raw_ascii( p_dec1 ),
                                                              raw_ascii( p_dec2 ) ) ) );
END bit_xor;
---
FUNCTION raw_ascii( p_dec IN NUMBER )
 RETURN RAW DETERMINISTIC
AS
 nTmp   NUMBER := p_dec;
 result VARCHAR2( 1999 );
BEGIN
 LOOP
   result := result || Chr( Mod( nTmp, 256 ) );
   nTmp := Trunc( nTmp / 256 );
   EXIT WHEN( nTmp = 0 );
 END LOOP;
 RETURN( utl_raw.cast_to_raw( result ) );
END raw_ascii;


 
Ломброзо ©   (2006-05-12 16:01) [4]

Ой как всё сложно.
А вот и BITANDNOT

CREATE OR REPLACE FUNCTION BITANDNOT(A NUMBER, B NUMBER) RETURN NUMBER
IS
BEGIN
RETURN A - (BITAND(A, B));
END;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
6-1140887955
Sco
2006-02-25 20:19
2006.07.16
IP адресса


5-1135421009
sco
2005-12-24 13:43
2006.07.16
SetXXXXValue и class


3-1147586181
Sphinx
2006-05-14 09:56
2006.07.16
Минимальные сис.требования Microsoft Jet OLEDB 4.0


15-1150402399
AKS
2006-06-16 00:13
2006.07.16
вакансия: программист delphi на удаленную работу


15-1150434472
pavel_guzhanov
2006-06-16 09:07
2006.07.16
непонятная проблема с компом... наконец решил спросить





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский