DBI를 사용하여 perl에서 테이블을 만들려고합니다. 내가/복사가 완벽하게 작동 mysql을 직접 만들 $에 동일한 문자열을 붙여 넣을 때Perl DBI 테이블 만들기 오류
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.
:이 프로그램을 실행할 때 나는 다음과 같은 오류가
#! 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;
: 이것은 내 코드입니다.
감사합니다.
편집 : 죄송합니다. 분명히해야합니다. 다른 소스에서 $ create에있는 것을 가져옵니다. 이것은 그것의 일부일 뿐이며 텍스트를 편집 할 수 없습니다. 배열로 분할하고 하나씩 실행하는 방법을 알아야합니다.
일부 db 계층은 동일한 단계에서 여러 쿼리를 실행하는 것을 원하지 않습니다. 어쨌든 쿼리는 정상적으로 보입니다. 큰 쿼리 문자열을 다른 쿼리로 분할하는 것이 좋습니다. –
@LajosVeres 예, 한 번에 하나의 쿼리로 분할하려고 시도했지만 작동합니다.문제는 내가 다른 소스에서이 데이터를 가져올 것이며 위의 내용은 일부 테이블을 만드는 예일 뿐이므로 편집 할 수 없으며이를 다른 변수로 구문 분석하는 방법을 알지 못한다. . – CircuitB0T
그런 다음 문자열을 세미콜론으로 분리하여 하나씩 실행 해보십시오. –