我目前在一个使用
当前的插入语句
DBI
模块的Perl脚本中有一个插入语句,用于收集路由器接口数据。每次都能正常运行,但显然会因为某些项目已存在而出现唯一约束错误,当脚本重新运行时。我尝试使用合并语句代替,但不像我看到的示例那样从另一个表中选择数据。为了更好地理解,Perl脚本通过运行ssh
到设备并将某些信息存储到变量中来收集数据。例如,接口名称将是$interface
等。当前的插入语句
$dbh->do("INSERT INTO table VALUES (?, ?, ?, ?, ?)", undef, $interface, $id, $device, $description, $user);
我开始编写合并功能,但似乎无法理解它的工作原理,因为所有的合并语句都从其他表中选择匹配数据,然后进行更新/插入操作?下面的示例从两个不同的表中选择匹配的数据,然而我只关注一个表,并希望合并新数据。
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);
因此,它将数据合并到bonuses
中,但是从员工匹配。即使这样的语句可以工作,使用这样的语句在Perl脚本中是否可能?