我想在使用DBI的perl中創建表。這是我的代碼:Perl DBI創建表錯誤
#! usr/bin/perl
use strict;
use warnings;
use 5.014;
use DBI;
my $user = "user";
my $password = "password";
my $hostname = "localhost";
my $database = 'database';
my $dsn = "DBI:mysql:database=$database;host=$hostname;";
my $dbh = DBI->connect($dsn, $user, $password, { RaiseError => 1});
my $create = "-- drop table if exists DEVICE;
CREATE TABLE DEVICE(
NAME CHAR(60),
ID CHAR(36) NOT NULL,
SHORT_ID INT UNSIGNED,
MODEL CHAR(50),
SERIAL_NUMBER VARCHAR(50),
IP_ADDRESS CHAR(50),
LOCATION CHAR(50),
DV_VERSION CHAR(20),
OS_VERSION CHAR(20),
DEVICE_GROUP CHAR(50),
MANAGED TINYINT NOT NULL,
CONSTRAINT PK_DEVICE PRIMARY KEY (ID)
) Engine = InnoDB;
-- drop table if exists SEGMENT;
CREATE TABLE SEGMENT(
ID CHAR(100) NOT NULL,
DEVICE_ID CHAR(36) NOT NULL,
NAME CHAR(60),
IP_ADDRESS CHAR(50),
SLOT_INDEX INT NOT NULL,
SEGMENT_INDEX INT NOT NULL,
CONSTRAINT PK_SEGMENT PRIMARY KEY (ID),
KEY(DEVICE_ID),
CONSTRAINT FK_PARENT_DEV FOREIGN KEY (DEVICE_ID) REFERENCES DEVICE(ID)
) Engine = InnoDB;
";
my $sth = $dbh->prepare($create);
$sth->execute;
我收到以下錯誤,當我運行此:
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE SEGMENT(
ID CHAR(100) NOT NULL,
DEVICE' at line 18 at file.pl line 47.
當我複製/粘貼在$直接在MySQL創建完全相同的字符串,它完美的作品。
請幫忙,謝謝。
編輯:對不起,我應該澄清。我拉從另一個來源$創建。這只是其中的一部分,我無法編輯文本。我想我需要知道如何將它分解成一個數組並逐個執行它們。
某些db層不希望在同一步驟中執行多個查詢。無論如何,查詢看起來很正常。值得嘗試將大查詢字符串拆分爲不同的查詢。 –
@LajosVeres是的,我試圖一次只分割成一個查詢,它的工作原理。問題是我將從另一個來源獲取這些數據,以上是一些創建表的示例,因此我將無法對其進行編輯,而且我不知道如何將其解析爲不同的變量。 – CircuitB0T
然後嘗試用分號分割字符串並逐個執行它們。 –