Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2010, 23h03   #1
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : -1
Points : -1
Par défaut Procédure éliminer attributs superflus dans dépendance fonctionnelle

Bonsoir tout le monde,
je suis débutante en sql et j'ai un projet a faire en sql dynamique j'ai pas su résoudre le probléme : on veut écrire une procédure qui élimine les attributs superflus dans une dépendance fonctionnelle
voila ce que j'ai fait mais je pense que ce n'est pas correct

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
CREATE OR REPLACE procedure Eliminer_sf(f IN number) AS
V_idcur integer;
v_selectcmd varchar2(100);
v_ndf f.ndf%type;
v_ag f.ag%type;
v_ad f.ad%type;
s number;
 
begin
 
--ouverture du cursseur
v_idcur :=DBMS_SQL.OPEN_CURSOR;
 
--construction de la requéte
V_selectcmd := 'select v_ndf, v_ag, v_ad from f';
 
--compilation de la requéte
DBMS_SQL.PARSE(V_Idcur, V_selectcmd, DBMS_SQL.V7);
 
--établissement du lien
DBMS_SQL.BIND_VARIABLE(V_idcur, ':b_f', f);
DBMS_SQL.DEFINE_COLUMN(v_idcur, 1, v_ndf);
DBMS_SQL.DEFINE_COLUMN(v_idcur, 2, v_ag);
DBMS_SQL.DEFINE_COLUMN(v_idcur, 3, v_ad);
 
--exécution de la requéte
s:=DBMS_SQL.EXECUTE(v_idcur);
 
--boucle de lecture des lignes du cursseur
LOOP
IF (DBMS_SQL.fetch_rows(v_idcur)=0 then
EXIT;
end IF;
 
--affectation des valeurs dans les variables
DBMS_SQL.COLUMN_VALUE(v_idcur , 1, v_ndf);
DBMS_SQL.COLUMN_VALUE(v_idcur , 2, v_ag);
DBMS_SQL.COLUMN_VALUE(v_idcur , 3, v_ad);
 
--insertion dans la table temporaire
INSERT INTO table_temp(col1)
VALUES (v_ndf||' '||v_ag||' '||v_ad);
end LOOP
--fermeture du curseur
DBMS_SQL.CLOSE_cursor(v_idcur);
commit;
EXCEPTION
when others then
DBMS_SQL.CLOSE_cursor(v_idcur);
Raise;
end;
landouch est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/12/2010, 23h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Quel est le SGBD ?

Je ne comprends pas du tout à quoi peut bien servir cette procédure !
Pas plus que l'énoncé de son but d'ailleurs !
Citation:
une procédure qui élimine les attributs superflus dans une dépendance fonctionnelle
Un exemple aiderait à comprendre peut-être ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 23h43   #3
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : -1
Points : -1
déja je suis pas sure de ma réponse ce que je veux faire c'est écrire une procédure qui élimine le superflu dans une dépendance fonctionnelle en sql dynamique
voila un exp
Soit F l'ensemble suivant de dépendances fonctionnelles canoniques.
F = { 1) A->B ;  2)B->C ; 3)A,B->E, 4)A,E->F, 5)A,F->E}
dans la df 3)la partie gauche en appliquant la pseudo-transitivité.  3)A, B ->E se simplifie alors en 3') A-> E.
landouch est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/12/2010, 00h44   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Ce que je ne comprends pas, c'est le rapport entre les dépendances fonctionnelles et une procédure SQL.

Le spécialiste des dépendances fonctionnelles, c'est fsmrel, pas moi. Mais il me semble que ce genre d'animal se rencontre surtout au moment de la conception d'une base de données, lors de sa modélisation. Pas au moment où elle est déjà implantée et qu'on l'alimente ou qu'on l'interroge.

Vouloir "supprimer des attributs superflus dans une dépendance fonctionnelle" veut-il dire "supprimer des colonnes inutiles dans une table" ?
Alors ça veut dire que la conception a été ratée non ?

C'est pour ça que je ne comprends pas le but de la procédure. J'ai l'impression qu'il s'agit d'utiliser un canon pour tuer un moustique !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 10h16   #5
Membre actif
 
Inscription : février 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 167
Points : 161
Points : 161
Bonjour,

Ce sera bien de préciser pour qu'on puisse regarder.
Qu'est ce qui n'est pas "correct" et que fait ou ne fait pas votre procédure ?

A part ça pour faire du dynamique il y a plus simple en fonction de votre version d'Oracle.
Quelle est-elle ?

Courage.
Pozzo
Pozzo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 10h28   #6
 
Inscription : décembre 2010
Messages : 4
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 4
Points : -1
Points : -1
Pour l'erreur c'est au niveau de la requéte V_selectcmd := 'select v_ndf, v_ag, v_ad from f';
il faut éliminer le superflu hors je pense que cette requéte permet juste une selection des champs de la table
pour ma version oracle c'est 10g

aussi il me manque une partie aprés boucle loop (indiquée dans le code ci dessus) dans cette partie je dois comparer les lignes de la table temporaire avec celles de la table initiale et ou je trouve une ligne dont l'attribut droit = l'attribut gauche je dois la supprimer dans la table initiale et vider la table temporaire
je sais pas si vous m'avez compris mais c'est vu que je suis débutante en sql dynamique je sais pas comment résoudre mon probléme et je me suis couru vers ce forum en espérant avoir de l'aide car il s'agit d'un compte rendu noté
landouch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 12h46   #7
Membre du Club
 
AC
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : AC
Âge : 43
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 48
Points : 48
landouch,

bien compris que c'est un travail noté

1) c'est quoi le paramètre f de la procédure ?
2) pourquoi n'y a-t-il pas de :b_f dans v_selectcmd pour "binder" la variable ?

on va y arriver, mais faut expliquer un peu plus les différents éléments, ce que tu dois faire (synthèse de l'énoncé, objectif de la procédure ...)

A+
wahnfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h05.


 
 
 
 
Partenaires

Hébergement Web