Firebird Documentation IndexFirebird 2.5 リリースノート手続き型SQL(PSQL) → PSQLの変数にデータベースのカラムの型を借用
Firebird Home Firebird Home Prev: 自律型トランザクションFirebird Documentation IndexUp: 手続き型SQL(PSQL)Next: EXECUTE文の新たな拡張

PSQLの変数にデータベースのカラムの型を借用

Adriano dos Santos Fernandes

トラッカー・リファレンス CORE-1356

この機能はバージョン2での実装を拡張したものです。これによって、PSQLで変数を宣言するための“データ型”としてドメインが利用できるようになりました。この用途のために、テーブルまたはビューからカラム定義のデータ型を借用できるようになりました。

構文パターン

    data_type ::=
         <組み込みデータ型>
       | <ドメイン名>
       | TYPE OF <ドメイン名>
       | TYPE OF COLUMN <テーブルまたはビュー>.<カラム>
    

Note

TYPE OF THEはカラムの型のみ取得します。カラムに定義された任意の制約またはデフォルト値は無視されます。

CREATE TABLE PERSON (
  ID INTEGER,
  NAME VARCHAR(40)
  );

CREATE PROCEDURE SP_INS_PERSON (
  ID TYPE OF COLUMN PERSON.ID,
  NAME TYPE OF COLUMN PERSON.NAME
  )
  AS
DECLARE VARIABLE NEW_ID TYPE OF COLUMN PERSON.ID;
BEGIN
  INSERT INTO PERSON (ID, NAME)
    VALUES (:ID, :NAME)
    RETURNING ID INTO :NEW_ID;
END
    

トラップに注意!

バージョン2.5以上では、カラムのデータ型の変更が可能になっています。そのカラムがストアドプロシージャやトリガで参照されていたとしても、例外がスローされることはありません。ただし、コンパイル済みのPSQLはBLOB内でバイナリ表現(“BLR”)として静的に格納されているため、オリジナルのBLRはバックアップやリストアを行なっても残っています。BLRは静的であるため、データ型を変更しても更新されません。

このことは、TYPE OF構文や、テーブルから影響を受けるカラム、また、それらのテーブルから派生した任意のビューのカラムを使って変数が宣言されている場合、コンパイル済みBLRがデータ型の変更によって破壊されてしまうことを意味します。最善の場合、BLRは“注意が必要”のフラグを付けられますが、テストでは、どんな条件でもフラグ付けが行なわれるわけではないことが分かっています。

つまり、フィールドがコンパイル済みPSQLに何らかの依存関係を持っていたとしても、あなたがそのフィールドの型を変更するのをエンジンはもう止めてくれなくなった、ということです。変更された状況の管理のため、影響を受けるプロシージャやトリガを特定したり、変更に対応してそれらを再コンパイルしたりすることは、あなた自身の問題となります。

Prev: 自律型トランザクションFirebird Documentation IndexUp: 手続き型SQL(PSQL)Next: EXECUTE文の新たな拡張
Firebird Documentation IndexFirebird 2.5 リリースノート手続き型SQL(PSQL) → PSQLの変数にデータベースのカラムの型を借用