SQL Engine Reference (v11)

ビット演算 OR(|)

ビット演算子 OR は、2 つのオペランド間でビットごとの論理和演算を実行します。

ビット演算 OR は、2 つのビットを比較し、一方または両方のビットの値が 1 の場合は、値 1 を結果に代入します。入力式のどちらのビットの値も 1 でない場合は、結果のビットに 0 をセットします。OR 演算子は、オペランドとして数値のみを取ります。

構文

|

は INTEGER データ型を含んでいる任意の有効な式です。ビット演算のためにバイナリ数値へ変換されます。

戻り値

異なる INTEGER データ型のオペランドを伴うビット演算 OR では、2 つのオペランドのうち、サイズの小さなデータ型の引数が大きなデータ型へ変換されるか、または大きい方の次に大きなデータ型へ変換されます。たとえば、smallint と integer の間で OR 演算を実行する場合、smallint 式は integer へ変換されます。

ビット演算 OR にかかわるオペランドが符号付きの場合、結果の値も符号付きになります。

この例では、最初に X$Index テーブルに外部キー エントリと主キー エントリを作成する方法を示し、次に外部キーと主キーの制約の一覧を取得する方法を示します。

次のステートメントを実行すると、X$Index テーブルに 2 つのエントリが作成されます(1 つは外部キー用で、1 つは主キー用です)。

CREATE TABLE Employee 
( 
  empid   IDENTITY NOT NULL PRIMARY KEY, -- Employee ID 
  empname VARCHAR(50) NOT NULL, -- employee の名前 
  supid   INTEGER     NULL -- supervisor の ID 
) 
 
ALTER TABLE Employee  
ADD CONSTRAINT SupIdMustBeValid  
FOREIGN KEY (supid) REFERENCES Employee(empid)  
ON DELETE CASCADE 

次のステートメントを実行すると、データベース内の全テーブルに関するすべての外部キーおよび主キーの一覧が取得されます。

select B.Xf$Name "Table name", C.Xe$Name "Column name",  
IF (Xi$Flags & 8192 = 0, 'Primary key', 'Foreign key')
  "Key type" from  X$Index A, X$File B, X$Field C 
    where (A.Xi$Flags & (16384 | 8192)) > 0 AND  
        A.Xi$File = B.Xf$Id AND 
        A.Xi$Field = C.Xe$Id 

ステートメントを実行すると、次のようになります。

Employee            	empid               	Primary key 
Employee            	supid               	Foreign key 

ビット演算 NOT(~)

ビット演算 排他的OR(^)