[英]oracle db update on if condition
我已經創建了兩個表,並想用另一個表的值更新一個表的行。 但是,必須滿足一些條件。 我已經通過以下示例進行了嘗試,但是沒有用。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.