簡體   English   中英

為什么即使我的SQLite版本支持`CREATE TABLE IF NOT EXISTS`,我仍會收到DBD :: SQLite語法錯誤?

[英]Why do I get a syntax error with DBD::SQLite even though my version of SQLite supports `CREATE TABLE IF NOT EXISTS`?

我正在使用SQLite v3編寫Perl腳本。 sqlite版本是3.3.6。

當我在命令行上運行sqlite時,它可以工作。 但是當我在Perl中執行相同的操作時,會引發此錯誤

DBD :: SQLite :: db失敗:在“ NOT”附近:dbdimp.c 268行在文件行2675處語法錯誤(1)。

這是我在控制台上所做的:

$ 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);");

我使用的SQLite版本支持IF NOT EXISTS,那么為什么會出現錯誤?

因為DBD :: SQLite沒有使用您已經安裝的SQLite版本。 DBD :: SQLite捆綁了自己的SQLite版本 除非您在編譯時告訴它使用另一個版本,否則它將使用捆綁版本。

您可以通過運行以下命令找出DBD :: SQLite使用的SQLite版本:

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

v3.3.0中的SQLite添加了CREATE TABLE ... IF NOT EXISTS 的支持 您應該升級DBD :: SQLite,因為最新版本(1.50)與SQLite 3.10.2捆綁在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM