2016-04-04 8 views
-1

私はPerlスクリプトを書くためにSQLite v3を使用しています。 sqliteのバージョンは3.3.6です。私のバージョンのSQLiteでCREATE TABLE IF NOT EXISTSがサポートされていても、DBD :: SQLiteで構文エラーが発生するのはなぜですか?

コマンドラインでsqliteを実行すると動作します。 「NOT」そば:構文エラー(1)ファイルの行2675でdbdimp.cライン268で私はPerlで同じことを行うときしかし、それは

DBD :: SQLiteの:: DBが失敗したか、このエラーが発生します。

これは私がコンソール上に何をすべきかです:

$ sqlite3 test.db 
SQLite version 3.3.6 
sqlite> create table if not exists DATA_STATUS_VALUE (TYPE TEXT PRIMARY KEY, Seq INTEGER); 
sqlite> .tables AllJobs   LOCKSTAT_VALUE  test_run12_data 
DATA_STATUS_VALUE STATUS_VALUE  test_run12_lock 

のSQLiteのバージョン私はサポートIF NOT EXISTSを使用していますので、なぜ私はエラーを取得していますか?

これは私のPerlコードです:

#!/usr/bin/perl 

use DBI; 
my $driver = "SQLite"; 

$database = "test.db"; 
$dsn  = "DBI:$driver:dbname=$database"; 
$dbh  = DBI->connect($dsn, undef, undef, { RaiseError => 1 }); 

$dbh->do("CREATE TABLE IF NOT EXISTS DATA_STATUS_VALUE (TYPE TEXT PRIMARY KEY, Seq INTEGER);"); 
+3

DBite :: SQLiteはどのバージョンのSQLiteを使用していますか? 'perl -E 'はDBD :: SQLiteを使用します。 $ DBD :: SQLite :: sqlite_version'' – ikegami

+0

DB <3> $ DBD :: SQLite :: sqlite_version 3.1.3 –

+0

は、perlでsqliteのバージョンを選択する方法です。私はシステムに何もインストールすることができません –

答えて

6

のSQLiteのバージョンEXISTSれていない場合、私はサポートを使用していますので、なぜ私はエラーを取得していますか?

DBD :: SQLiteはすでにインストールされていたSQLiteのバージョンを使用していないためです。 DBD :: SQLiteにはits own version of SQLiteがバンドルされています。コンパイル時に別のバージョンを使用するように指定しない限り、バンドルされたバージョンを使用します。

あなたは実行することにより、DBD :: SQLiteのが使用しているのSQLiteのバージョンを見つけることができます:CREATE TABLE ... IF NOT EXISTSため

perl -MDBD::SQLite -le'print $DBD::SQLite::sqlite_version' 

サポートがadded to SQLite in v3.3.0ました。最新バージョン(1.50)にはSQLite 3.10.2がバンドルされているため、DBD :: SQLiteをアップグレードする必要があります。

+0

ありがとう。私はあなたの答えに感謝します。 –

関連する問題