gpt4 book ai didi

sql - Oracle合并而不是插入?

转载 作者:行者123 更新时间:2023-12-01 00:20:44 25 4
gpt4 key购买 nike

我目前在 perl 脚本中有一个使用 DBI 的插入语句收集路由器接口(interface)数据的模块。它每次都有效,但显然存在唯一约束错误,因为重新运行脚本时存在某些项目。我正在尝试进行合并,但我不确定如何通过不从另一个表中选择数据来做到这一点,就像我看到的示例一样。为了更好地理解,perl 脚本通过运行 ssh 来收集数据。到设备并将某些信息存储到变量中。例如接口(interface)名称将是 $interface .等等

当前插入语句

$dbh->do("INSERT INTO table VALUES (?, ?, ?, ?, ?)", undef, $interface, $id, $device, $description, $user);

我开始编写合并函数,但我似乎无法掌握这将如何工作,因为所有合并语句确实从其他表和匹配数据中选择,然后进行更新/插入?下面的示例从 2 个不同的表中选择数据并进行匹配,但是我只查看一个表并想要合并新数据。
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 脚本中使用这样的语句?

最佳答案

在您的情况下,MERGE像这样的声明应该有效。请注意,我从 DUAL 中选择一条记录。 table 。您可以使用多个 UNION ALL来自 DUAL对于多行。

MERGE INTO yourtable target
USING (SELECT 1 AS id, 'value_1' AS column_1, 'value_2' AS column_2
FROM DUAL) source
ON (source.id = target.id)
WHEN MATCHED
THEN
UPDATE SET
target.column_1 = source.column_1, target.column_2 = source.column_2
WHEN NOT MATCHED
THEN
INSERT (column_1, column_2)
VALUES (source.column_1, source.column_2);

关于sql - Oracle合并而不是插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48942960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com