Oracle数据库表用作数组来执行其他查询

时间:2010-12-09 06:37:57

标签: sql loops oracle10g

我一直在搜索书籍和网页几个小时,我找不到任何真正的运气。由于Oracle或PL / SQL并不是我生命中最伟大的礼物,我会以这种方式尝试。

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

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

x =来自TABLE_A的SELECT *; 对于每个x  UPDATE TABLE_B其中kitten = x; 结束循环

帮助?

2 个答案:

答案 0 :(得分: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);

它比程序对应的更快,并且代码行更少,使其更容易理解和迁移到其他数据库。

答案 1 :(得分: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;