2016-04-04 5 views
-1

Ich benutze SQLite v3, um ein Perl-Skript zu schreiben. Die SQLite-Version ist 3.3.6.Warum bekomme ich einen Syntaxfehler mit DBD :: SQLite, obwohl meine Version von SQLite `CREATE TABLE IF NOT EXISTS 'unterstützt?

Wenn ich sqlite in der Befehlszeile ausführen, funktioniert es. Aber wenn ich die gleiche Sache in Perl zu tun wirft es auf diesen Fehlern

DBD :: SQLite :: db nicht getan: in der Nähe von "NOT": Syntaxfehler (1) an dbdimp.c Linie 268 in Dateizeile 2675.

Dies ist, was ich auf der Konsole folgendes ein:

$ 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 

die Version von SQLite ich verwende unterstützt IF NOT EXISTS, also warum bin ich erhalte eine Fehlermeldung?

Das ist mein Perl-Code:

#!/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

Welche Version von SQLite verwendet DBD :: SQLite? 'perl -E'use DBD :: SQLite; sagen $ DBD :: SQLite :: sqlite_version'' – ikegami

+0

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

+0

gibt es eine Möglichkeit, sqlite-Version per Perl auszuwählen. Ich kann nichts auf dem System installieren –

Antwort

6

Die Version von SQLite Ich bin mit Stützen WENN NICHT VORHANDEN, also warum bin ich erhalte eine Fehlermeldung?

Da DBD :: SQLite nicht die Version von SQLite verwendet, die Sie bereits installiert haben. DBD :: SQLite wird mit its own version of SQLite geliefert; Es wird die gebündelte Version verwenden, es sei denn, Sie sagen ihm, beim Kompilieren eine andere Version zu verwenden.

Sie können die Version von SQLite herauszufinden, die DBD :: SQLite wird durch Ausführen mit:

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

Unterstützung für CREATE TABLE ... IF NOT EXISTS war added to SQLite in v3.3.0. Sie sollten DBD :: SQLite aktualisieren, da die neueste Version (1.50) im Lieferumfang von SQLite 3.10.2 enthalten ist.

+0

danke. Ich schätze deine Antworten. –

Verwandte Themen