SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

Oracle PL/SQL 編1 - 注釈、識別子、引用句、変数、演算子、比較演算子

Oracle の PL/SQL は、Pascal 言語に非常に近い。
私は、Pascal for Windows を使っていた時期があるので楽だった。

■注釈(コメント)

  --  1 行注釈
  /*  複数行注釈開始
  */  複数行注釈終了

  1 行注釈は、Execute コマンド等の begin...end; ブロックなどでは使えない。
  /* 1 行注釈 */ のようにして使うと良い。
  尚、コメントはネストできない。

■識別子

  PL/SQL は、VB と同じでリテラル以外は、大文字小文字の区別はない。

■引用句(デリミタ)

  '文字列'  シングルコーテーション
  "識別子"  ダブルコーテーション

  ・識別子引用句は、テーブル項目名に空白が含まれる場合や予約語と衝突する
    場合などに "abc def" のように使用する。

  ・文字引用句中に文字としてのシングルコーテーションを入れる場合は、
    'Sak''s homepahe' のように、二度続けて書く。

■変数タイプ

【数値型】

  pls_integer       -2,147,483,647 〜 2,147,483,647
                    (binary_integer より高速)

  binary_integer    -2,147,483,647 〜 2,147,483,647
  natural
  naturaln          NULL は許さない
  positive
  positiven         NULL は許さない
  signtype          -1, 0, 1

  number(全桁, 小数部桁)  全桁最大は 38 桁
  dec
  decimal
  double_precision
  integer
  int
  numeric
  real
  smallint
  float(2 進数桁)   2 進数桁最大は 126 桁

【文字型】

  varchar2(文字数)  最大文字数 32767 (テーブル中では 4000 が最大)
  string
  varchar

  char(文字数)      最大文字数 32767 (テーブル中では 2000 が最大)
  character
  long              最大文字数 32760 (最大容量としては 2GB)
  raw(バイト長)     最大バイト 32767 (テーブル中では 2000 が最大)
  long raw          最大バイト 32760 (最大容量としては 2GB)

  rowid             テーブル行 ID

【NLS 文字型】

  nchar(文字数)     最大文字数 32767 (テーブル中では 2000 が最大)
  nvarchar2(文字数) 最大文字数 32767 (テーブル中では 4000 が最大)

【LOB 型】

  bfile             最大 4GB
  blob              最大 4GB
  clob              最大 4GB
  nclob             最大 4GB

【その他】

  date              日付型
  boolean           TRUE、FALSE、NULL
  mlslabel          内部表現ラベル
  record            レコード型
  table             テーブル型
  varray            Varray 型
  ref cursor        カーソル変数
  ref object_type   共有型

【サブタイプ】

  subtype suryo is number;

  jcsu suryo(12, 2);

【レコード型】

  type tjcrec is record (
    jcno char(10),
    tkcd char(4),
    prno varchar2(16),
    jcsu number(12, 2)
  );

  jcrec tjcrec;

■変数宣言

  varname vartype;
  varname vartype := 初期値;
  varname vartype default デフォルト値;
  varname vartype not null := 初期値;
  varname vartype := 式;
  varname vartype := 変数;
  constname constant vartype := 定数;

  shimei varchar2(20);
  ritsu number(12, 2) := 1.25;
  ritsu number(12, 2) default 1.25;
  ritsu number(12, 2) not null := 1.25;
  atai number(12) : = 100 * ritsu;
  DT_MAX constant number := 99;

  C 言語の int a, b のような複数変数を一度に宣言することはできない。
  変数のスコープは、begin...end; 内である。VB や C 言語と同じ。
  サブの begin...end; で宣言された変数は、ローカル変数となる。

■%type

  jcno jcmf.jcno%type;

  %type は、テーブルのデータ型を与える。

■%rowtype

  jcrec jcmf%rowtype;

  %rowtype は、テーブルの行レコードを与える。
  テーブルとカーソルの %rowtype の一括代入は、タイプが違うので出来ない。
  しかし、同形式の %rowtype は、jcrec := jcrec2; の一括代入ができる。
  また、select * into jcrec from jcmf where 品番 = 'a001'; は可能ですが、
  insert into jcmf values (jcrec); の書式は指定出来ません。

  select 受注数 - 出荷数 zan from jcmf... のように列名が単純名でなくなる
  場合、必ず、別名を zan のように指定する必要があります。

■コレクション宣言

  type a is table of varchar2(20);
  type a is table of varchar2(20) index by binary_integer;
  type a is table of varchar2(20) not null index by binary_integer;
  type a is table of jcmf%rowtype;

  type a is varray(100) of varchar2(20);
  type a is varying array(100) of varchar2(20);
  type a is varying array(100) of varchar2(20) not null;
  type a is varray(100) of jcmf%rowtype;

■論理リテラル(ブール)

  TRUE
  FALSE

■演算子、比較演算子

  :=  代入

  +   加算
  -   減算
  *   乗算
  /   除算
  **  指数

  ||  連結
  =>  結合
  ..  範囲

  =   等しい
  <   より小さい
  >   より大きい
  <=  以下
  >=  以上
  <>  等しくない
  !=  等しくない
  ~=  等しくない
  ^=  不明

  not      SQL と同じ
  is null  SQL と同じ
  like     SQL と同じ
  bitween  SQL と同じ
  in       SQL と同じ
  and      SQL と同じ
  or       SQL と同じ

  <<  ラベル開始
  >>  ラベル終了

  NULL を含む比較は、NULL が返る。
  比較結果が NULL の場合、NOT 論理演算子も NULL を返す。
  ループ条件が NULL の場合、ループは実行されない。
  従って、NULL が存在する項目の演算、比較、制御は要注意である。
  nvl(列名, 0) や nvl(列名, '    ') で安全に処理した方が良い。
  尚、PL/SQL では、'' の長さ 0 の文字列の代入は、NULL となる。
  従って、a := nvl(変数, ''); は、NULL がセットされる。
  これは、けっこうつらい。
  if 変数 is null then... などの判定も使用すると良い。

  文字列結合では、'abc' || NULL || 'def' は、単に 'abcdef' が返り、
  NULL は無視されるだけなので助かる。

■Oracle PL/SQL 編資料
■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK