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?