Oracle 9i equivalent de fonctionSQL model ?

Fermé
gilal Messages postés 1 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 11 novembre 2008 - 11 nov. 2008 à 18:04
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 11 nov. 2008 à 22:07
Bonjour à Tous
Voila,je me prends la tête pour un truc que j'ai déjà fait il y a une paire d'année. Je fais donc appel à vos compétences.
Je travaille sur une base oracle 9i.
Donc,je n'ai pas les nouvelles fonctionnalités oracle 10g

J’ai une 1° table LIEN qui me sert à avoir une ligne avec une colonne debut et un fin par lien
DEBUT;FIN;LIEN
----;----;---
NBA2;NBA1;AMI

J'ai une autre table TOTO avec 2 colonnes EXTA et EXTB et une colonne commune LIEN du type varchar,
remplie de façon aléatoire mais qui ont toutes et toujours un champ de départ et un champ de fin qui vient de la table
LIEN (dans ce cas NBA2 et NBA1)

EXTA ;EXTB ;LIEN
--------;--------;---;
CREC;AEB0;AMI
NBA2;NEC8;AMI
NEB0;NBA1;AMI
NEC8;AEB0;AMI
CREC;NEB0;AMI

En prenant le cas où elle est remplie de 5 lignes remplies aléatoirement
(ici champ de départ=ligne 2 coll EXTA et champ de fin ligne 3 donnée EXTB)

Je voudrais créer une table TATA qui me donne le résultat suivant
NBA2 ;NEC8 ;AMI ;1
NEC8;AEB0;AMI ;2
AEB0 ;CREC ;AMI ;3
CREC;NEB0;AMI ;4
NEB0;NBA1;AMI ;5

A) Ca, c'est le cas ou j'ai une continuité entre NBA2 et NBA1
de sorte que je puisse me débrouiller pour avoir en ligne la continuité des champs de la table TOTO
AMI;NBA2-NEC8;NEC8-AEB0;AEB0-CREC;CREC-NEB0; NEB0-NBA1

B) Ca se complique quand j'ai il me manque une ligne de la table TOTO (la 4° par ex).
Je dois quand même créer ma table TATA
Supposons que la table TOTO soit ainsi
EXTA ;EXTB ;LIEN
--------;--------;---;
CREC;AEB0;AMI
NBA2;NEC8;AMI
NEB0;NBA1;AMI

CREC;NEB0;AMI

Je voudrais quand même pouvoir avoir la table TATA remplie ainsi
NBA2 ;NEC8 ;AMI ;1
????;????;AMI ;2
AEB0 ;CREC ;AMI ;3
CREC;NEB0;AMI ;4
NEB0;NBA1;AMI ;5

de sorte que je puisse me débrouiller pour avoir en ligne la continuité et l’anomalie
AMI;NBA2-NEC8;ANOMALIE;AEB0-CREC;CREC-NEB0; NEB0-NBA1

Si vous pouvez-m'aider à créer ce code, je pourrais alors l'adapter
à des tables remplies de X lignes et voir celles qui ont des anomalies.

Merci si vous avez le temps, c'est plutôt énervant de tout gérer
J’ai des exemples en oracle 10 avec la fonction MODEL,qui n’existe pas en oracle 9
Mais je ne peux le faire qu'en SQL ou PLSQL avec curseurs et exception et je m'y perds.

Gilal
A voir également:

1 réponse

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
11 nov. 2008 à 22:07
Salut,
essaye cela:
declare
cursor cur is select * from toto;
cursor curs is select DEBUT,FIN,LIEN from toto;
mon_curs cur%rowtype;
mon_curs1 curs%rowtype;
var number(4):=1;
j tata.DEBUT%type;
begin
i:=1;
open cur;
fetch cur into mon_curs;
while cur%FOUND loop
begin
	 select tata.DEBUT into j from tata where tata.DEBUT=mon_curs.DEBUT and tata.FIN=mon_curs.FIN and tata.LIEN=mon_curs.LIEN;
	 exception when NO_DATA_FOUND then
	 		   begin
			   open curs;
			   fetch curs into mon_curs1;
			   while curs%FOUND loop
			   if mon_curs.FIN=mon_curs1.DEBUT 
					  then insert into tata (DEBUT,FIN,LIEN) values (mon_curs.DEBUT,mon_curs.FIN,mon_curs.LIEN);
					  	   insert into tata (DEBUT,FIN,LIEN) values (mon_curs1.DEBUT,mon_curs1.FIN,mon_curs1.LIEN);
					       var:=0;
			   end if;
			   fetch curs into mon_curs1;
			   end loop;
			   close curs;
			   if var=1 
			   then 
			   insert into tata (DEBUT,FIN,LIEN) values (mon_curs.DEBUT,'ANOMALIE',mon_curs.LIEN);
			   var:=1;
			   end if;
			   end;
end;
fetch cur into mon_curs;
end loop;
close cur;
end;

modif le en fonction de tes variables....
J'espere ca pourra t'aider!!
@+
0