2010-12-09 75 views
0

我一直在搜索书籍和网络几个小时,我找不到任何真正的运气。由于Oracle或PL/SQL在生活中并不是我最大的礼物,所以我尝试这样做。用作数组执行其他查询的Oracle数据库表

我想要实现的是选择像表A中的所有记录,并在循环中使用“每个”记录。

在伪代码中,它会是这样的。

x =来自TABLE_A的SELECT * for each x UPDATE TABLE_B where kitten = x; end for loop

帮助?

回答

2

使用光标:

DECLARE 
cursor c1 is 
    select monthly_income 
    from employees 
    where name = v_name_in; 
BEGIN 
    FOR employee_rec in c1 
    LOOP 
     update tableB set incom_val = employee_rec.monthly_income where ...; 
    END LOOP; 
END; 

或:

DECLARE 
    BEGIN 
     FOR employee_rec in (select monthly_income 
           from employees 
           where name = v_name_in) 
     LOOP 
      update tableB set incom_val = employee_rec.monthly_income where ...; 
     END LOOP; 
    END; 
4

如果可能的话,尽量把它写成一个UPDATE语句。

update table_b b 
    set (b.col1, b.col2) = (
      select a.colx + 10, a.coly/18 
      from table_a a 
      where b.id = a.id); 

它比程序对手更快,代码行也更少,使得它更易于理解和迁移到其他数据库。