日頃 Firebird を利用していて、有用なクエリを自力で調査したり、どこかのサイトで書いてあったクエリの備忘録。
今まで、PCローカルに記録していたものです、ちょっとずつ追加して行きます。
基本は Firebird 1.5 / 2.1 / 3.0 で確認しています。2.5 は環境を作っていないので、はっきりとは言えませんが、多分動作すると思います。
ここに書いたことは、間違っている可能性もあります。
利用する場合は、ご自身で確認してからお願いします。
テーブル名一覧の取得
1 2 3 4 |
SELECT RDB$RELATION_NAME as TableName FROM RDB$RELATIONS WHERE RDB$VIEW_SOURCE IS NULL AND RDB$SYSTEM_FLAG = 0 ORDER BY RDB$RELATION_NAME |
・取得できるテーブル名は、大文字です。
テーブルに張られているインデックス名の取得
1 2 3 |
SELECT RDB$INDEX_NAME as IndexName FROM RDB$INDICES WHERE RDB$RELATION_NAME = 'TBLXXX' |
・テーブル TBLXXX に張られている、インデックス名一覧を取得。TBLXXXは大文字で指定します
・主キー名も取得できます。主キー名は RDB$PRIMARYn の様な名前です。n は数字
・unique 制約がある場合も、RDB$n の様な名前のインデックスが張られる様です
文字列 varchar(n) または char(n)フィールドの n を取得
1 2 3 4 |
select f.RDB$CHARACTER_LENGTH as L from RDB$FIELDS f join RDB$RELATION_FIELDS r on (f.RDB$FIELD_NAME=r.RDB$FIELD_SOURCE) where r.RDB$RELATION_NAME='TBLXXX' and r.RDB$FIELD_NAME='FIELDXXX' |
・テーブル TBLXXX 文字列フィールド FIELDXXX の文字列長を取得。TBLXXX、FILEDXXX は大文字で指定します
・文字列以外のフィールドを指定すると、結果は null となります
・character set によって実際に格納できる文字数が異なります。SJIS_0208 の場合は、半角文字を格納する場合は、2n文字格納可能。UTF8の場合は、全角、半角に関わらず、n文字格納可能となります
テーブルの主キー名称を取得、主キーの削除
1 2 3 |
SELECT RDB$CONSTRAINT_NAME AS PKEY_NAME FROM RDB$RELATION_CONSTRAINTS WHERE (RDB$RELATION_NAME = 'TBLXXX') AND (RDB$CONSTRAINT_TYPE = 'PRIMARY KEY') |
・テーブル TBLXXX の主キーの名称を取得します。この名前はテーブルを作成した時に自動的に付けられ、INTEG_XX (XXは数字)の様なものになる。
・この名称を使用して↓のクエリで、主キーを削除することもできる。
1 |
ALTER TABLE TBLXXX DROP CONSTRAINT INTEG_XX |
主キーを構成する、フィールド名を取得
1 2 3 4 5 6 |
select S.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS S where S.RDB$INDEX_NAME in (select R.RDB$INDEX_NAME from RDB$RELATION_CONSTRAINTS R where R.RDB$CONSTRAINT_TYPE='PRIMARY KEY' AND R.RDB$RELATION_NAME='TBLXXX') order by S.RDB$FIELD_POSITION |
・テーブル TBLXXX の主キーを構成するフィールド名を取得します。
PRIMARY KEY (FIELD1, FIELD2) だとすると、取得できる結果は、2レコードです。
ドメインを使用しているテーブル、フィールド名を取得
1 2 3 |
select f.rdb$Field_Name as FieldName,f.rdb$Relation_Name as TableName from rdb$relation_fields f where f.rdb$Field_Source='DOMAINNAME' |
・ドメイン DOMAINNAME を使用している、テーブル名とフィールド名の一覧を取得します。