37 件中 11 - 20 件を表示
« 前の 10 件 | 次の 10 件 »
Displaying posts with tag: Firebird/InterBase (reset)
使い慣れたSQLに潜む実装依存: Firebirdの場合(10) ORDER BY でのNULLの扱い

本エントリはFirebird Adventcalendar 2016の17日目です。

使い慣れたSQLに潜む実装依存:3.構文とトランザクション ORDER BY

最新のFirebird 3.xでは、MySQL, SQL serverと同様にNULLは最小として扱われます。

SQL&gt create table table_name(column_name int);
SQL&gt insert into table_name values(1);
SQL&gt insert into table_name values(2);
SQL&gt insert into table_name values(3);
SQL&gt insert into table_name values(null);
SQL&gt insert into table_name values(null);
SQL&gt comiit;

SQL&gt select * from table_name order by 1;

COLUMN_NAME
============
&ltnull&gt

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(7) INSERT時のスペース

本エントリはFirebird Adventcalendar 2016の10日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 INSERT時のスペース

ここでもFirebirdは多数側、つまりOracleとVertica以外のRDBMSと同じ結果を返します。

SQL&gt create table table1(c1 char(3),c2 varchar(3));
SQL&gt insert into table1 values('ABC ','AB ');
SQL&gt select * from table1;

C1 C2
====== ======
ABC AB

ちょっとわかりにくいので、c2にちゃんと後続のスペースがついているかどうか確認すると。。。

SQL&gt select octet_length(c1),octet_length(c2) from table1;

OCTET_LENGTH …

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子

本エントリはFirebird Adventcalendar 2016の8日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 文字列の結合演算子

Firebirdの場合、ここでの多数を占めるように結果はNULLとなります。
またCONCAT関数はありません。

SQL&gt select null || 'ABC' from rdb$database;

CONCATENATION
=============
&ltnull&gt

SQL&gt select concat(null,'ABC') from rdb$database;
Statement failed, SQLSTATE = 39000
Dynamic SQL Error
-SQL error code = -804
-Function unknown
-CONCAT

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子

本エントリはFirebird Adventcalendar 2016の8日目です。

使い慣れたSQLに潜む実装依存:2.データ型と演算子 文字列の結合演算子

Firebirdの場合、ここでの多数を占めるように結果はNULLとなります。
またCONCAT関数はありません。

SQL&gt select null || 'ABC' from rdb$database;

CONCATENATION
=============
&ltnull&gt

SQL&gt select concat(null,'ABC') from rdb$database;
Statement failed, SQLSTATE = 39000
Dynamic SQL Error
-SQL error code = -804
-Function unknown
-CONCAT

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(5) CURRENT_TIMESTAMP

本エントリはFirebird Adventcalendar 2016の7日目です。

使い慣れたSQLに潜む実装依存:1.関数 CURRENT_TIMESTAMP

Firebirdの場合 バージョン2.0からCURRENT_TIMESTAMPが実装され、
戻り値としては、ここで多数を占める「現在時刻」を返します。

ここでいう「現在時刻」とは、CURRENT_TIMESTAMPを評価するステートメントの開始時刻です。

そのため、ステートメント内で複数回評価されても、同じ値を返すことになります。

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(4) CHAR型に対するLENGTH

本エントリはFirebird Adventcalendar 2016の5日目です。

使い慣れたSQLに潜む実装依存:1.CHAR型に対するLENGTH


OracleとDB2が10を返していますが、基本的にCHAR型の性質を考えると
こちらのほうが正しい挙動にみえます。Firebirdもこれらと同じ動作です。

SQL&gt create table t1(c1 char(10));
SQL&gt insert into t1 values('ABC');
SQL&gt select char_length(c1) from t1;

CHAR_LENGTH
============
10

ただ、このような仕様だとchar(10)にデータとして何をいれてもchar_lengthが10であるため
そもそも意味がない、ということで、3を戻す実装が多くあるのだと思います。

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(3) LENGTH

本エントリはFirebird Adventcalendar 2016の4日目です。

使い慣れたSQLに潜む実装依存:1.関数LENGTH

ここでの違いはlength()でバイト数を戻すか、文字数を戻すか、の違いです。

MySQLとDB2はlength()はバイト数を返すので、1ではなくなっていますが、
その場合はcharacter_lengthを利用すれば(そして文字コードを正しくセットしていれば)1になります。

大元の問題はlength()がバイト数、文字数どちらを返すかがRDBMSによりまちまちなところです。

しかしFirebirdの場合は、length()がなく、バイナリ長を戻すoctet_lengsh()と
文字長を戻すcharacter_length()しかないので、ある意味曖昧さが軽減されています。

[さらに読む]
使い慣れたSQLに潜む実装依存: Firebirdの場合(1)

本ブログエントリはFirebird Advent Calendar 2016の一日目です。

先日Database Lounge Tokyo #3で、しのださんによる以下の発表がありました。

Differences in SQL Statement from Noriyoshi Shinoda

いろいろまだAdvent Calendar の準備ができてないので、しばらくこのネタにのっかります。

MOD(3,0)の結果ですが、Firebirdではめでたく(?) Div/0 Errorになります。

SQL&gt select mod(3,0) from rdb$database;

MOD
============
Statement failed, SQLSTATE = 22012

[さらに読む]
「SQL実践入門」勝手に補足: Firebirdで実行計画を見る

前回MySQLで実行計画を見る、をブログに書きました。

今回はそれのFirebird版です。

■「図1.8::店舗テーブルのサンプル」を作成、のcreate tableはそのまま実行できます。

テーブルスキャンとインデックススキャンは、set planonlyを実行してから実行します。

SQL> select * from shops;

PLAN (SHOPS NATURAL)


SQL> SELECT *
CON> FROM Shops
CON> WHERE shop_id = '00050';

PLAN (SHOPS INDEX (PK_SHOPS))

上記はFirebird 3.0での実行結果ですが、それ以前のFirebirdでも同じだと思います。

■「図1.14::予約管理テーブルのサンプル」を作成
も、Firebirdで問題なく実行できます。

SQL> …

[さらに読む]
2016年のFirebird, 3.0とともに

本エントリはFirebird Advent Calendar 2015 最終日のエントリです。

去年の同日に以下のような記事を書きました。

2015年のFirebird


とりあげたトピックは次の三つでした。

1.Firebird 3.0のリリース
2.LibreOffice Baseへの組み込みと拡散
3.より容易な開発・組み込み・配布


今年はどうでしょうか?

まず1.Firebird 3.0のリリースは残念ながら2015年に果たすことはできませんでした。ようやく2015年後半にRC1がでただけです。しかしながらさすがに2016年中にはでるでしょう。(というか、でることを期待します)2010年以降のオープンソースRDBMS御三家とSQL標準のリリースは次の図のとおり。

[さらに読む]
37 件中 11 - 20 件を表示
« 前の 10 件 | 次の 10 件 »