代入演算子、算術演算子、比較演算子、論理演算子
SQL の 単純比較条件 の内容と比較すると「指数」演算子(**) が存在しないこと、 「等しくない」の (¬= ) 演算子が存在しないことに差異があるがほぼ同一である。
優先 順位 | 演算子 | 内容 | |
1 | ** | 指数 (POWER 関数 相当) | 算術 |
2 | + , - | 符号 |
3 | * , / | 乗算、除算 |
4 | + , - , || | 加算、減算、文字連結 |
5 | = | 等しい | 比較 |
<> , != ^= , ~= | 等しくない |
> , < | (左辺が)より大きい、より小さい |
>= , <= | (左辺が)以上、以下 |
IS NULL | NULL かどうかをテスト |
LIKE | パターン比較 |
BETWEEN a AND b | a 以上 b 以下の範囲テスト |
IN | メンバー比較 (SQL の = ANY 相当) |
何で否定条件にだけ、こんなに種類があるんでしょうか
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プロシージャが正常に完了しました。
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