DB/Oracle/PLSQL/変数の利用

Top/DB/Oracle/PLSQL/変数の利用

目次

変数を使う基礎基本。


基本的な使い方

使う変数は必ず宣言が必要。大文字と小文字は区別されない。

  • 変数の利用

変数名の制約

使う際、大文字と小文字は区別されないので注意。

  • 文字で始まること
  • 文字または数値、記号($、_、#)からなること
  • 30 文字以下であること
  • 予約語ではないこと

変数の型

変数にはいくつか型があるのでその確認。

  • PL/SQL 変数
    • スカラデータ型
    • コンポジットデータ型
    • 参照データ型
    • LOB データ型
  • PL/SQL 以外の変数
    • バインド変数

スカラデータ型

単一の値だけ保存できる変数。いわゆる変数、一般的な意味での変数はこれ。

  • スカラデータ型一覧(抜粋)
    説明
    CHAR[(<size>)]固定長文字データ。最大 32,767 バイト
    VARCHAR2[(<size>)]可変長文字データ。最大 32,767 バイト
    NUMBER[(<precision, scale>)]数値。オプションは精度と桁数
    PLS_INTEGER整数。NUMBER 型より早い
    BOOLEAN真偽値。TRUE か FALSE か NULL
    DATE日付
    TIMESTAMP日付。小数秒まで含む
    TIMESTAMP WITH TIME ZONE日付。タイムゾーンの時差を含む

文字列リテラル

VARCHAR2 型で宣言。最大で 32,767 バイト。表の列の型では 4,000 だったので違いに注意。

  • 文字列リテラル

ブール変数

真偽値。値は TRUE、FALSE、NULL のどれか。

  • ブール変数

コンポジットデータ型

複数の値を保持できる変数。配列みたいなもの。

  • 種類
    • PL/SQL レコード
    • PL/SQL コレクション
  • 種類の詳細
    種類型名呼び方備考
    PL/SQL レコードrecordレコード変数よく使う
    PL/SQL コレクションtable索引付き表よく使う
    nested tableネストした表
    varrayvarray

RECORD 型

テーブルの行(横一列)なイメージ。異なる型のデータを複数保持する場合。

  • RECORD 型

データベースとの連携も柔軟。ある表の列定義と同じフィールドを持つ RECORD 型変数を簡単に作るのが %ROWTYPE。

  • %ROWTYPE

TABLE 型

索引付き表。テーブルの列(縦一列)なイメージ。同じ型のデータを複数保持する場合。

索引というのは、いわゆる配列の添え字みたいなもの。ただし連続している必要はない。めちゃくちゃな順序で入れてもいい(内部的には格納順ではなくて索引順でソートされて管理されるっぽい)。数字をよく使うけど、varchar2 でも良い。そうすると連想配列みたいなものになるね。

データの個数は定義しない。可変長配列みたいなもの。

  • TABLE 型

メソッドが使える。中途半端にオブジェクト指向……?

  • メソッド

レコードの索引付き表

TABLE 型に RECORD 型を放り込むとあら不思議! 二次元配列! テーブルそのまんま!

  • レコードの索引つき表
    declare
        type foo is table of bar%rowtype
          index by pls_integer;
        
        hoge foo;
    begin
        hoge(1).baz := 100;
    end;
    /
    

バインド変数

ホスト環境内に作成される変数。ホスト変数ともいう。

  • SQL*Plus っていうアプリケーション上に変数を作って参照する。PL/SQL のブロックが終了してもアクセスできるので便利かもしれない
  • バインド変数の宣言
    
    
    • NUMBER 型の場合、桁数とか精度とかは指定できない
    • DATE 型はない

%TYPE 属性

データベースの列と同じ型を格納するように変数を宣言する。

変数に、ある表のある列から値を代入したいときに使う。表名と列名が明らかであれば、わざわざ表の列の型を調べなくていいし、ALTER TABLE によるテーブルの仕様変更にも自動で対応できる。

また、定義済みの変数と同じ型で別の変数を使いたいときにも使える。

ソースコードを見ただけでは型がわからない(もしくはわかりにくい)というデメリット もある。

  • %TYPE 属性を付加した変数の宣言

置換変数との差異

混同しないように気をつけよう。


Last-modified: 2011-11-08 (火) 15:33:12