2010-12-09 57 views
0

J'ai parcouru les livres et le web pendant des heures, et je n'ai pas trouvé de vraie chance. Comme Oracle ou PL/SQL n'est pas vraiment mon plus beau cadeau dans la vie, j'essaie de l'essayer de cette façon. Ce que je veux réaliser est de sélectionner comme tous les enregistrements dans le TABLEAU A et utiliser chaque enregistrement dans une boucle.Table de base de données Oracle à utiliser en tant que tableau pour exécuter une autre requête

En pseudo code, ce serait quelque chose comme ça.

x = SELECT * à partir de TABLE_A; pour chaque x MISE À JOUR TABLE_B où chaton = x; fin pour boucle

Aide?

Répondre

2

Utilisez le curseur:

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; 

ou:

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

Si possible, essayez de l'écrire comme une seule instruction 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); 

Il est plus rapide que la contrepartie de la procédure et a également moins de lignes de code qui permettent de mieux comprendre et migrer vers d'autres bases de données.