Bonjour a tous,

Je debute en PL/SQL et j'ai du mal a creer une requete.

Cette requete doit :

1)inserer des lignes de la table A dans la table B (condition: lignes de la table A qui n'existent pas dans B)

2) updater les lignes de tableB qui sont aussi dans tableA.

(donc la procedure doit recuperer les nouvelles lignes et updater les lignes existantes)

Cette procedure tournera chaque fin de mois.

J'ai cree la requete suivante :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create or replace procedure  SP_UPDATE_table_B
 
BEGIN
 
INSERT INTO tableB (a,b,c,d,e,f,g,h,i,j,k, l,m,n,o,p)
SELECT a,b,c,d,e,f,g,h,i,j, r as k,  s as l, t as m, u as n, v as o, w as p
  FROM tableA
 WHERE tableA.a not in (select a from tableB);
 
 update tableB
 set  k= tableB.k + tableA., 
         l=......,
         M= .....,
        n=..... ,     
        o=......,
        p= ......
 WHERE tableA.a in (select a from tableB);
 
END;
J'ai change les noms des champs pour simplifier.

Cette requete ne tourne pas sur TOAD, faut-il creer une variable de type Rowtype pour recuperer toutes les valeurs d'une ligne puis creer une autre variable de type tab pour recuperer toutes les lignes de la table A qui ne sont pas dans la table B ?

J'ai lu sur un tutoriel que le select dans une procedure stockee ne doit ramener qu'une seule valeur.

Merci d'avance a ceux qui pourront m'aider, je galere et je devais finir aujourd'hui, c'est un pour un projet au boulot.

Bonne fin de journee