代入演算子、算術演算子、比較演算子、論理演算子

SQL の 単純比較条件 の内容と比較すると「指数」演算子(**) が存在しないこと、 「等しくない」の (¬= ) 演算子が存在しないことに差異があるがほぼ同一である。

 
演算子内容
:=代入演算子
 
演算子の内容と優先順位
優先 順位演算子内容
1**指数 (POWER 関数 相当)算術
2+  ,  -符号
3*  ,  /乗算、除算
4+  ,  -  ,  ||加算、減算、文字連結
5=等しい比較
<>  ,  !=
^=  ,  ~=
等しくない
>  ,  <(左辺が)より大きい、より小さい
>=  ,  <=(左辺が)以上、以下
IS NULLNULL かどうかをテスト
LIKEパターン比較
BETWEEN a AND ba 以上 b 以下の範囲テスト
INメンバー比較 (SQL の = ANY 相当)
6NOT論理否定論理
7AND論理積
8OR論理和

何で否定条件にだけ、こんなに種類があるんでしょうか

SQL> set serveroutput on
SQL> begin
  2     if (1 <> 1) then
  3             null;
  4     elsif ( 'abc' != 'abc' ) then
  5             null;
  6     elsif ( sysdate ^= sysdate) then
  7             null;
  8     elsif ( hextoraw('ff') ~= hextoraw('ff')) then
  9             null;
 10     else
 11             dbms_output.put_line('色々な条件否定の演算子');
 12     end if;
 13  end;
 14  /
色々な条件否定の演算子

括弧を使った方が良い例

SQL> begin
  2      if ( NOT 1 + 1 IS NULL OR FALSE) then
  3          dbms_output.put_line('IS TRUE');
  4      end if;
  5  end;
  6  /
IS TRUE

NOT 1 + 1 IS NULL OR FALSE ⇒ NOT (( 1 + 1 ) IS NULL) OR FALSE
⇒ NOT ( FALSE ) OR FALSE ⇒ TRUE OR FALSE ⇒ TRUE

日付と期間と掛け算

SQL> declare
  2     vdate date;
  3  begin
  4     vdate := date '2000-01-01';
  5     vdate := vdate + 24*60*60* interval '1' second;
  6     dbms_output.put_line(vdate);
  7  end;
  8  /
2000-01-02 00:00:00

SQL の単純比較条件 を PL/SQL でも使用してみる。

SQL> BEGIN
  2     IF ('ABC' = 'ABC') THEN
  3             DBMS_OUTPUT.PUT_LINE('AAAA');
  4     END IF;
  5  END;
  6  /
AAAA
 
PL/SQLプロシージャが正常に完了しました。  OK

PL/SQL におけるリスト単純比較条件

使用できない。

SQL> BEGIN
  2     IF (('ABC', 'XYZ') = (SELECT 'ABC', 'XYZ' FROM DUAL)) THEN
  3             DBMS_OUTPUT.PUT_LINE('AAAA');
  4     END IF;
  5  END;
  6  /
        IF (('ABC', 'XYZ') = (SELECT 'ABC', 'XYZ' FROM DUAL)) THEN
                             *
行2でエラーが発生しました。:
ORA-06550: 行2、列23:
PLS-00405: このコンテキストで副問合せはできません。
ORA-06550: 行2、列2:
PL/SQL: Statement ignored


PL/SQL の演算子の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)