2016.12.18 Sunday
使い慣れたSQLに潜む実装依存: Firebirdの場合(12) UPDATE文による主キーの入れ替え
本エントリはFirebird Adventcalendar 2016の17日目です。
使い慣れたSQLに潜む実装依存:3.構文とトランザクション UPDATE文による主キーの入れ替え
まぁMySQLと同じでだめな感じですorz 素朴な実装なので。。。。
SQL> create table table1(c1 int primary key);
SQL> insert into table1 values(1);
SQL> insert into table1 values(2);
SQL> update table1 set c1 = case c1 when 1 then 2 when 2 then 1 end;
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_15" on table "TABLE1"
-Problematic key value is ("C1" = 2)
これはできるのが正しくて、できないMySQLやFirebirdは仮の数字をワーク変数として
ひとつのトランザクションでやるしかないですねぇ。
CASE式を使用して、主キーを入れ替える方法 SQL(開発チームのブログ)
まぁそもそも「主キーの入れ替えすんな」と思っちゃいますがね :)
さて、しのはらさんのLTに頼りきりの今回の連載(?) 今回で終了です。次回までにネタを探します。
ありがとうございましたm(_ _)m しのはらさん
使い慣れたSQLに潜む実装依存:3.構文とトランザクション UPDATE文による主キーの入れ替え
まぁMySQLと同じでだめな感じですorz 素朴な実装なので。。。。
SQL> create table table1(c1 int primary key);
SQL> insert into table1 values(1);
SQL> insert into table1 values(2);
SQL> update table1 set c1 = case c1 when 1 then 2 when 2 then 1 end;
Statement failed, SQLSTATE = 23000
violation of PRIMARY or UNIQUE KEY constraint "INTEG_15" on table "TABLE1"
-Problematic key value is ("C1" = 2)
これはできるのが正しくて、できないMySQLやFirebirdは仮の数字をワーク変数として
ひとつのトランザクションでやるしかないですねぇ。
CASE式を使用して、主キーを入れ替える方法 SQL(開発チームのブログ)
まぁそもそも「主キーの入れ替えすんな」と思っちゃいますがね :)
さて、しのはらさんのLTに頼りきりの今回の連載(?) 今回で終了です。次回までにネタを探します。
ありがとうございましたm(_ _)m しのはらさん
JUGEMテーマ:コンピュータ