Database oracle数据库在if条件下更新
我已经创建了两个表,希望用另一个表的值更新其中一个表的行。 但必须满足一些条件。我用下面的例子试过了,但没有成功Database oracle数据库在if条件下更新,database,oracle,if-statement,conditional-statements,Database,Oracle,If Statement,Conditional Statements,我已经创建了两个表,希望用另一个表的值更新其中一个表的行。 但必须满足一些条件。我用下面的例子试过了,但没有成功 BEGIN SELECT * FROM table_1, table_2; IF table_1.column_2 = table_2.column_2 AND table_1.column_1 IS NULL THEN UPDATE table_1 SET table_1.column_1 = table_2.column_1;
BEGIN
SELECT * FROM table_1, table_2;
IF table_1.column_2 = table_2.column_2 AND table_1.column_1 IS NULL THEN
UPDATE table_1 SET table_1.column_1 = table_2.column_1;
ELSIF ((table_1.column_2 = table_2.column_2) AND table_1.column_3 IS NULL) THEN
UPDATE table_1 SET table_1.column_3 = table_2.column_3;
ELSIF ((table_1.column_2 = table_2.column_2) AND (table_1.column_3 IS NULL)
AND (table_1.column_1 IS NULL)) THEN
UPDATE table_1 SET table_1.column_3 = table_2.column_3, table_1.column_2 = table_2.column_2;
ELSE
INSERT INTO table_1 (column_2, column_1, column_3)
VALUES (table_2.column_2, table_2.column_1, table_2.column_3);
END IF;
END;
/
有人给我一个提示吗?您只需进一步工作,就可以在结果行上循环:
begin
for line in
(
SELECT t1.column_1 c11, t1.column_2 c12, t1.column_3 c13,
t2.column_1 c21, t2.column_2 c22, t2.column_3 c23
FROM table_1 t1, table_2 t2
)
loop
IF line.c12 = line.c22 AND line.c11 IS NULL THEN
UPDATE table_1 SET column_1 = line.c21;
ELSIF ((line.c12 = line.c22) AND line.c13 IS NULL) THEN
UPDATE table_1 SET column_3 = line.c23;
ELSIF ((line.c12 = line.c22) AND (line.c13 IS NULL)
AND (line.c11 IS NULL)) THEN
UPDATE table_1 SET column_3 = line.c23, column_2 = line.c22;
ELSE
INSERT INTO table_1 (column_2, column_1, column_3)
VALUES (line.c22, line.c21, line.c23);
END IF;
end loop;
end;
/
您好,您需要使用游标来获取每一行,然后进行比较和更新,以下是如何在oracle中使用游标:
DECLARE
CURSOR c1 IS
SELECT last_name, job_id FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR item IN c1
LOOP
//do your stuff with item.field
END LOOP;
END;
正如@Polppan所评论的,最好通过
MERGE
:
MERGE INTO table_1
USING table_2
ON (table_1.column_2 = table_2.column_2)
WHEN MATCHED THEN UPDATE SET
table_1.column_1 = table_2.column_2,
table_1.column_3 = table_2.column_3
WHEN NOT MATCHED THEN
INSERT (column_1, column_2, column_3)
VALUES (table_2.column_1, table_2.column_2, table_2.column_3);
您可以查看MERGE语句,例如,请参阅。第三次更新是否应该更改列_1和列_3而不是列_2?