Firebird 3.0 の新しい SQL 構文 [Firebird]
この記事はFirebird Advent Calendar 2017 https://qiita.com/advent-calendar/2017/firebird の15日目の記事です。
いままでと重複あるかもしれませんが、ここで Firebird3.0 のリリースノートを見直して、新しい SQL 構文を自分で試してみました。
https://firebirdsql.org/file/documentation/release_notes/Firebird-3.0.0-ReleaseNotes.pdf
(トリガーは自分は使わなさそうなので試してません)
【BOOLEAN Type】
いままでは 0/1 で持っていたのですが、BOOLEAN 型ができました。
MySQL の boolean みたいに 1/0 じゃなくて true/false が返ります。
【自動インクリメント型のカラム定義】
今までも、 generator + trigger を使うとか、sequence を使うとかで、
自動インクリメントで採番するカラムの作成はできたんですが
https://firebirdsql.org/refdocs/langrefupd21-ddl-sequence.html
より、直接的に書ける方法ができました。
採番される値をリセットするには、以下のような SQL文を使います
WITH 100 を付けた場合、次の INSERT 文では 101 が設定されます。
【カラムの NOT NULL 制約を付ける、外す】
カラムの NOT NULL 制約を付けたり外したりするのに、今まではシステムテーブルを update するという荒業が行われていました。
http://www.firebirdfaq.org/faq103/
Firebird 3.0 から、このシステムテーブルの update ができなくなり(エラーになり)代わりに、カラムの nullability を設定する直接的な ALTER 文が書けるようになりました。
table に NOT NULL 制約を付ける
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
table の NOT NULL 制約を外す
ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL;
【OFFSET/FETCH 句】
結果セットの中の「何行目から何行」という指定をしたいときは、
いままでも、 FIRST ~ SKIP という構文は使えました。
https://scott.yang.id.au/2004/01/limit-in-select-statements-in-firebird.html
SQL:2008 標準で OFFSET ~ FETCH という構文があるそうで、Firebird 3.0 で、それが使えるようになりました
いままでと重複あるかもしれませんが、ここで Firebird3.0 のリリースノートを見直して、新しい SQL 構文を自分で試してみました。
https://firebirdsql.org/file/documentation/release_notes/Firebird-3.0.0-ReleaseNotes.pdf
(トリガーは自分は使わなさそうなので試してません)
【BOOLEAN Type】
いままでは 0/1 で持っていたのですが、BOOLEAN 型ができました。
SQL> CREATE TABLE bool_table (b BOOLEAN); SQL> INSERT INTO bool_table (b) VALUES (TRUE); SQL> INSERT INTO bool_table (b) VALUES (FALSE); SQL> INSERT INTO bool_table (b) VALUES (NULL);
MySQL の boolean みたいに 1/0 じゃなくて true/false が返ります。
【自動インクリメント型のカラム定義】
今までも、 generator + trigger を使うとか、sequence を使うとかで、
自動インクリメントで採番するカラムの作成はできたんですが
https://firebirdsql.org/refdocs/langrefupd21-ddl-sequence.html
より、直接的に書ける方法ができました。
SQL> CREATE TABLE id_table (id INTEGER GENERATED BY DEFAULT AS IDENTITY, name VARCHAR(30)); SQL> INSERT INTO id_table (name) VALUES ('nakagami'); SQL> SELECT * FROM id_table; ID NAME ============ ============================== 1 nakagami
採番される値をリセットするには、以下のような SQL文を使います
SQL> ALTER TABLE id_table ALTER COLUMN id RESTART; SQL> ALTER TABLE id_table ALTER COLUMN id RESTART WITH 100;
WITH 100 を付けた場合、次の INSERT 文では 101 が設定されます。
【カラムの NOT NULL 制約を付ける、外す】
カラムの NOT NULL 制約を付けたり外したりするのに、今まではシステムテーブルを update するという荒業が行われていました。
http://www.firebirdfaq.org/faq103/
Firebird 3.0 から、このシステムテーブルの update ができなくなり(エラーになり)代わりに、カラムの nullability を設定する直接的な ALTER 文が書けるようになりました。
table に NOT NULL 制約を付ける
ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
table の NOT NULL 制約を外す
ALTER TABLE table_name ALTER COLUMN column_name DROP NOT NULL;
【OFFSET/FETCH 句】
結果セットの中の「何行目から何行」という指定をしたいときは、
いままでも、 FIRST ~ SKIP という構文は使えました。
https://scott.yang.id.au/2004/01/limit-in-select-statements-in-firebird.html
SQL:2008 標準で OFFSET ~ FETCH という構文があるそうで、Firebird 3.0 で、それが使えるようになりました
SQL> select id from id_table order by id; ID ============ 1 2 3 4 SQL> select id from id_table order by id offset 1 rows fetch next 2 rows only; ID ============ 2 3
コメント 0