1
나는 데이터베이스에 값을 삽입하기 위해 노력하고, 내 데이터베이스 테이블로, 나는 장치 이름 열에 대한 고유 인덱스를 생성하고있는 DB에 삽입하기 전에 여기sqlite3 및 perl에서 고유 인덱스를 만드는 방법은 무엇입니까? 즉, 새 항목이 올 때마다 있도록
$stmt = qq(CREATE TABLE IF NOT EXISTS INFO
(
DeviceName TEXT NOT NULL,
CurrentStatus INT NOT NULL,
ReportTime TEXT,
OldStatus INT NOT NULL,
OldReportTime TEXT ););
주심 동일한 이름을 가진 dB로 오히려
$stmt = qq(CREATE UNIQUE INDEX ree ON INFO(DeviceName));
$stmt = qq(INSERT OR REPLACE INTO INFO(DeviceName, CurrentStatus,ReportTime,OldStatus,OldReportTime)
VALUES ('$FQDN', $currentstatus, '$currenttime', $oldstatus, '$oldtime'););
my $rv = $dbh->do($stmt) or die $DBI::errstr;
이 내가 고유 인덱스를 생성하고 다음 개체가 같은 장치 이름으로 입력하면 대체하기 위해 추가 된 몇 줄 수 있습니다, 대체됩니다 삽입되지 않았습니다. 그러나 나는 이것을 따라 갔지만 데이터베이스는 여전히 같은 DeviceName을 여러 번 저장하고있다.
#!/usr/bin/perl
use DBI;
use strict;
my $FQDN= "bubbly.bth.se";
my $currenttime = "Sat Dec 9 02:07:31 2017";
my $oldtime = "Sat Dec 9 02:06:31 2017";
my $currentstatus = "1";
my $oldstatus = "2";
my $driver = "SQLite";
my $database = "test.db";
my $dsn = "DBI:$driver:dbname=$database";
my $userid = "";
my $password = "";
my $dbh = DBI->connect($dsn, $userid, $password, { RaiseError => 1 })
or die $DBI::errstr;
print "Opened database successfully\n";
$stmt = qq(CREATE TABLE IF NOT EXISTS INFO
(
DeviceName TEXT NOT NULL,
CurrentStatus INT NOT NULL,
ReportTime TEXT,
OldStatus INT NOT NULL,
OldReportTime TEXT ););
my $rv = $dbh->do($stmt);
if(my $rv < 0) {
print $DBI::errstr;
} else {
print "Table created successfully\n";
}
$stmt = qq(CREATE UNIQUE INDEX ree ON INFO(DeviceName));
$stmt = qq(INSERT OR REPLACE INTO INFO(DeviceName,
CurrentStatus,ReportTime,OldStatus,OldReportTime)
VALUES ('$FQDN', $currentstatus, '$currenttime', $oldstatus,
'$oldtime'););
my $rv = $dbh->do($stmt) or die $DBI::errstr;
$dbh->disconnect();
NetSNMP::TrapReceiver::register("all", \&my_receiver) ||
warn "failed to register our perl trap handler\n";
print STDERR "Loaded the example perl snmptrapd handler\n";
이
내가 사용하고있는 코드, 내 출력bubbly.bth.se|1|Sat Dec 9 02:07:31 2017|2|Sat Dec 9 02:06:31 2017
bubbly.bth.se|1|Sat Dec 9 02:07:31 2017|2|Sat Dec 9 02:06:31 2017
bubbly.bth.se|1|Sat Dec 9 02:07:31 2017|2|Sat Dec 9 02:06:31 2017
bubbly.bth.se|1|Sat Dec 9 02:07:31 2017|2|Sat Dec 9 02:06:31 2017
bubbly.bth.se|1|Sat Dec 9 02:07:31 2017|2|Sat Dec 9 02:06:31 2017
이다 그러나이 같은 장치 이름을 발견하면 내가 때마다 대체 업데이트 또는 데이터베이스에서 하나 개의 행을하고 싶어 .
참고 : 가변 값은 쉽게 이해하기 위해 취해진 것입니다.
안녕하십니까, 답장을 보내 주셔서 감사합니다. 여기에 귀하의 솔루션 코드는 DeviceName이 동일한 지 확인하고 동일하면 그냥 행을 만들지 않지만 제 경우에는 새로 테이블을 업데이트하려고합니다. 오는 정보, 매번 DeviceName 만 같지만 다른 열은 시간이 바뀔 때마다 시간이 바뀌기 때문에 필요 정보가 데이터베이스에 들어올 때마다 동일한 업데이트가있을 경우 DeviceName을 확인해야합니다. INSERT, –
설명에서 필자는 메모를 언급했습니다. 변수 값은 쉽게 이해하기 위해 취해진 것입니다. 이는 다른 컬럼이 변경된 이름을 제외하고, 때때로 DeviceName도 변경된다는 것을 의미합니다. 그러면 else update를 삽입해야합니다. 고맙습니다 사전에 –
귀하의 의견 중 하나의 요점을 이해하지 않습니다. – ikegami