簡體   English   中英

oracle db更新if條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM