演習: ビット単位の集計関数の使用

この演習では、新しいビット単位の集計関数BIT_AND_AGGBIT_OR_AGGおよびBIT_XOR_AGGをグループ内のレコードのビット・レベルで使用する方法を示します。BIT_AND_AGGBIT_OR_AGGおよびBIT_XOR_AGGは、ビット単位のAND、ORおよびXOR演算の結果をそれぞれ返します。これらの集計は、単一の数値列または式に対して実行できます。ビット単位の集計演算の戻り型は常に数値です。

  1. 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
  2. SYSTEMとしてPDB20に接続し、数値およびビット単位の集計関数を使用して値を問い合せます。
    $ sqlplus system@PDB20
    
    SQL*Plus: Release 20.0.0.0.0 - Production on Mon Mar 16 08:48:55 2020
    Version 20.2.0.0.0
    
    Copyright (c) 1982, 2020, Oracle.  All rights reserved.
    
    Enter password: password
    Last Successful login time: Mon Mar 16 2020 04:28:54 +00:00
    
    Connected to:
    Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production
    Version 20.2.0.0.0
    
  3. ビット単位ANDは、同じ長さの2つのバイナリ表現を取り、対応するビットの各ペアに対して論理AND演算を実行するバイナリ演算です。比較位置の両方のビットが1の場合、結果のバイナリ表現のビットは1になり、それ以外の場合、結果は0になります。2つの数値にBIT_AND_AGG関数を適用します。次の例で使用されている値のビット・パターンは、1の場合は01、2の場合は10、3の場合は11です。
    SQL> WITH x AS (SELECT 2 c1 FROM dual UNION ALL SELECT 3 FROM dual) 
                  SELECT BIT_AND_AGG(c1) FROM x;
    
    BIT_AND_AGG(C1)
    ---------------
                  2
    
    SQL>
  4. ビット単位ORは、同じ長さの2つのビットパターンを取り、対応するビットの各ペアに対して論理的な包含的OR演算を実行するバイナリ演算です。各位置の結果は、両方のビットが0の場合は0になり、それ以外の場合は1になります。2つの数値にBIT_OR_AGG関数を適用します。
    SQL> WITH x AS (SELECT 2 c1 FROM dual UNION ALL SELECT 3 FROM dual) 
                  SELECT BIT_OR_AGG(c1) FROM x;
    
    BIT_OR_AGG(C1)
    --------------
                 3
    
    SQL>
  5. ビット単位XORは、同じ長さの2つのビットパターンを取り、対応するビットの各ペアに対して論理的な排他的OR演算を実行するバイナリ演算です。最初のビットのみが1または2番目のビットのみが1の場合は、各位置の結果は1になりますが、両方が0または両方が1の場合は0になります。したがって、2つのビットを比較すると、2つのビットが異なる場合は1になり、等しい場合は0になります。2つの数値にBIT_XOR_AGG関数を適用します。
    SQL> WITH x AS (SELECT 2 c1 FROM dual UNION ALL SELECT 3 FROM dual) 
                  SELECT BIT_XOR_AGG(c1) FROM x;
    
    BIT_XOR_AGG(C1)
    ---------------
                  1
    
    SQL> EXIT
    $