« SQLiteでトリガー(3) Main au W05K更新 »

SQLiteでトリガー(4)

(前の記事からの続き)

CREATE TABLE 時のDEFAULT指定ってあったよな、と思って、これを使えば登録日のほうのトリガーは要らないかも?と思ったんだが、こちらにはUTC固定のCURRENT_TIMESTAMPとかしか使えないということだった、はず。

これをローカルタイムに変換するにはdatetime()関数を使って、datetime(CURRENT_TIMESTAMP または ‘now’, ‘localtime’)などとしないといけないんだが、次のようにCREATE TABLEで実際に試してみるとエラーが出る。保存時にエラーになる問題のため一時的にSE_T, WHER_E, FRO_M, INT_Oなどと表記してます。了承下さいm(__)m)

sqlite> CREATE TABLE foo (id INTEGER PRIMARY KEY, name TEXT, regist DATETIME DEFAULT datetime('now','localtime'), modified DATETIME);
SQL error: near "(": syntax error

ところが、ふと思いついて関数の呼び出し箇所を括弧で括ってみたら動作してしまった!(なぜかここではTABL_Eも書き換えしないとエラーになってしまう…)

sqlite> CREATE TABL_E foo (id INTEGER PRIMARY KEY, name TEXT, regist DATETIME DEFAULT (datetime('now','localtime')), modified DATETIME);
sqlite> INSERT INT_O foo (name) VALUES ('taro');
sqlite> SELECT * FRO_M foo;
1|taro|2009-12-28 14:19:46|

上記はSQLite3でのものだが、SQLite2で試すと「SQL error: near “(“: syntax error」のままだった。SQLite3で可能になった記述のようだ。

これはSQLite上正しい動作なのかな?それなら、今後も安心して使えるんだが。(続く

Leave a comment

Your comment