Précision sur le curseur en pl/sql
Fermé
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
-
15 avril 2009 à 21:43
KéKiDonc ?? - 16 avril 2009 à 06:33
KéKiDonc ?? - 16 avril 2009 à 06:33
A voir également:
- Précision sur le curseur en pl/sql
- Curseur souris disparu - Guide
- Hon hai precision wifi ✓ - Forum WiFi
- Sql lister les tables ✓ - Forum Programmation
- Le curseur à la fin du texte indique qu'il n'y a pas de fautes. - Forum Word
- Blob sql ✓ - Forum Webmastering
7 réponses
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 22:02
15 avril 2009 à 22:02
ok merci. Ce cas là est possible si tu ne possèdes pas de loop ou sinon cela ne fonctionne pas.
J'ai une autre question:
Peux tu me donner ton avis sur cette syntaxe:
FUNCTION mise_a_jour (un_sid varchar2, un_pref varchar2, une_table varchar2) return varchar2 IS
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
un_sid: c'est le nom du database link.
Merci pour ton aide
J'ai une autre question:
Peux tu me donner ton avis sur cette syntaxe:
FUNCTION mise_a_jour (un_sid varchar2, un_pref varchar2, une_table varchar2) return varchar2 IS
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
un_sid: c'est le nom du database link.
Merci pour ton aide
Re,
1-
"Ok merci. Ce cas là est possible si tu ne possèdes pas de loop ou sinon cela ne fonctionne pas."
--> Si tu mets un Loop - ça fonctionnera OK sans problèmes mais il va mettre N fois à jour ton premier enregistrement récupéré dans ton curseur (:>).. ce qui n'est pas très intéressant c'est sur.
2-
FUNCTION mise_a_jour (un_sid varchar2, un_pref varchar2, une_table varchar2) return varchar2 IS
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
Remarque A -
||'AND blx.'||un_pref||'_rang = ano.type_fiche .. tu est sur de ta Host Variable ??... ce n'est pas plutôt un truc du genre ano.rang ?..
Remarque B - ATTENTION !!..
Cette requête supprime toute ta table une_table@... si au moins un enregistrement est retourné dans ton sous SELECT... c'est vraiment ce que tu veux ?...
Crdlt.
1-
"Ok merci. Ce cas là est possible si tu ne possèdes pas de loop ou sinon cela ne fonctionne pas."
--> Si tu mets un Loop - ça fonctionnera OK sans problèmes mais il va mettre N fois à jour ton premier enregistrement récupéré dans ton curseur (:>).. ce qui n'est pas très intéressant c'est sur.
2-
FUNCTION mise_a_jour (un_sid varchar2, un_pref varchar2, une_table varchar2) return varchar2 IS
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
Remarque A -
||'AND blx.'||un_pref||'_rang = ano.type_fiche .. tu est sur de ta Host Variable ??... ce n'est pas plutôt un truc du genre ano.rang ?..
Remarque B - ATTENTION !!..
Cette requête supprime toute ta table une_table@... si au moins un enregistrement est retourné dans ton sous SELECT... c'est vraiment ce que tu veux ?...
Crdlt.
Re,
Ok.
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
1-
Je sais pas au niveau syntaxe (fonction PL/SQL Oracle non ??) mais fonctionnellement elle supprime tous les enregistrement de la table une_table@... qui vérifient la condition de jointure avec la table t_anofiche.
2-
Oublie le problème des "host variables" - OK j'ai compris mais j'ai quand même un doute sur ||'AND blx.'||un_pref||'_rang = ano.type_fiche (voir message précédent) mais c'est peut être une erreur de frappe de ta part.
Slt.
Ok.
DELETE FROM '||une_table||'@'||un_sid||' blx'||' WHERE EXISTS'
||' (SELECT * FROM t_anofiche ano'
||' WHERE blx.'||un_pref||'_idFiche = ano.id_fiche'
||'AND blx.'||un_pref||'_tyFiche = ano.type_fiche'
||'AND blx.'||un_pref||'_rang = ano.type_fiche)';
1-
Je sais pas au niveau syntaxe (fonction PL/SQL Oracle non ??) mais fonctionnellement elle supprime tous les enregistrement de la table une_table@... qui vérifient la condition de jointure avec la table t_anofiche.
2-
Oublie le problème des "host variables" - OK j'ai compris mais j'ai quand même un doute sur ||'AND blx.'||un_pref||'_rang = ano.type_fiche (voir message précédent) mais c'est peut être une erreur de frappe de ta part.
Slt.
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 22:34
15 avril 2009 à 22:34
1- Il n'y a pas de LOOP dans mon script, donc je l'ouvre, je met la valeur dans une variable et je ferme le curseur. Il ne sera remis à jour N fois.
2-
Remarque A:
Tu as raison, c'est une erreur de ma part. Bien joué
Remarque B:
Je veux supprimer les données (id, type, rang d'une table) d'une table (@.....) si elle existent bien dans une autre table.
Voilà ce que je veux.
Une autre question:
je veux utiliser une boucle for avec pl/sql mais je ne sais pas comment faire, est ce possible de faire sous cette forme:
for ( i = variable1; i <= variable1; i++)
Merci pour ton aide
2-
Remarque A:
Tu as raison, c'est une erreur de ma part. Bien joué
Remarque B:
Je veux supprimer les données (id, type, rang d'une table) d'une table (@.....) si elle existent bien dans une autre table.
Voilà ce que je veux.
Une autre question:
je veux utiliser une boucle for avec pl/sql mais je ne sais pas comment faire, est ce possible de faire sous cette forme:
for ( i = variable1; i <= variable1; i++)
Merci pour ton aide
Re,
1-
J'avais pas percuté ta requête (voir message plus haut) - j'ai compris son principe et elle répond à ton besoins.
2-
Cas général (exemple) :
i := 0
variable1 := 10
LOOP
-- Traitements --
i := i + 1;
EXIT WHEN i > variable1;
Ton cas :
for ( i = variable1; i <= variable1; i++)
Malheureusement - tu ne rentreras qu'une fois dans ton for.
Mais bon.... :
i := variable1
LOOP
-- Traitements --
i := i + 1;
EXIT WHEN i > variable1;
Crdlt.
1-
J'avais pas percuté ta requête (voir message plus haut) - j'ai compris son principe et elle répond à ton besoins.
2-
Cas général (exemple) :
i := 0
variable1 := 10
LOOP
-- Traitements --
i := i + 1;
EXIT WHEN i > variable1;
Ton cas :
for ( i = variable1; i <= variable1; i++)
Malheureusement - tu ne rentreras qu'une fois dans ton for.
Mais bon.... :
i := variable1
LOOP
-- Traitements --
i := i + 1;
EXIT WHEN i > variable1;
Crdlt.
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 22:48
15 avril 2009 à 22:48
exact, j'ai fais une erreur de frappe.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 23:10
15 avril 2009 à 23:10
ok mais est ce que l'on peut écrire cette syntaxe dans du pl/sql:
for ( i = variable1; i <= variable1; i++)
Merci.
for ( i = variable1; i <= variable1; i++)
Merci.
Re,
Jamais vu.
Boucles en PL/SQL :
1-
FOR LOOP_COUNTER IN LOWER_LIMIT..UPPER_LIMIT LOOP
-- Traitements --
-- Trt Condition sortie EXIT_CONDITION --
IF EXIT_CONDITION THEN
EXIT;
END IF;
END LOOP;
2-
WHILE CONDITION LOOP
-- Traitements --
END LOOP;
3-
LOOP
-- Traitements --
EXIT WHEN CONDITION;
END LOOP;
Crdlt.
Jamais vu.
Boucles en PL/SQL :
1-
FOR LOOP_COUNTER IN LOWER_LIMIT..UPPER_LIMIT LOOP
-- Traitements --
-- Trt Condition sortie EXIT_CONDITION --
IF EXIT_CONDITION THEN
EXIT;
END IF;
END LOOP;
2-
WHILE CONDITION LOOP
-- Traitements --
END LOOP;
3-
LOOP
-- Traitements --
EXIT WHEN CONDITION;
END LOOP;
Crdlt.
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 23:21
15 avril 2009 à 23:21
tu ne réponds pas à ma question, est ce que l'on peut écrire la syntaxe suivant dans du pl/sql?
for ( i = variable1; i <= variable1; i++)
En ce qui concerne la première question que je t'avais posé, je veux savoir si je ne met pas de loop, est ce que cette syntaxe (OPEN, FETCH, CLOSE) marche bien.
Je suis d'acccord avec toi, si je met un loop, je vais lire N fois le même enregistrement. Mais dans mon cas, il n'y a pas de loop.
Merci pour ton aide
for ( i = variable1; i <= variable1; i++)
En ce qui concerne la première question que je t'avais posé, je veux savoir si je ne met pas de loop, est ce que cette syntaxe (OPEN, FETCH, CLOSE) marche bien.
Je suis d'acccord avec toi, si je met un loop, je vais lire N fois le même enregistrement. Mais dans mon cas, il n'y a pas de loop.
Merci pour ton aide
tipi75
Messages postés
680
Date d'inscription
lundi 20 août 2007
Statut
Membre
Dernière intervention
16 avril 2015
27
15 avril 2009 à 23:48
15 avril 2009 à 23:48
merci je crois que j'ai trouvé une "parade" à mon algo.
Merci
Merci
Re,
OK mais for ( i = variable1; i <= variable1; i++) revient strictement à :
for ( i = 0; i < 1; i++)
Pas besoin de variable1 à moins que tu n'ai besoin de l'initialisation de i à variable1 dans ta boucle pour des traitements particuliers mais alors il suffit d'utiliser directement variable1 à l'intérieur de ton for().
En C :
for ( i = 0; i < 1; i++)
{
<Utilisation variable1 - Traitements>
}
Doc : http://www.freebooksclub.net/128-oracle-plsql-by-example-4th-edition-prentice-hall.html
("Oracle PL/SQL By Example" - excellent).
Bonne nuit.
OK mais for ( i = variable1; i <= variable1; i++) revient strictement à :
for ( i = 0; i < 1; i++)
Pas besoin de variable1 à moins que tu n'ai besoin de l'initialisation de i à variable1 dans ta boucle pour des traitements particuliers mais alors il suffit d'utiliser directement variable1 à l'intérieur de ton for().
En C :
for ( i = 0; i < 1; i++)
{
<Utilisation variable1 - Traitements>
}
Doc : http://www.freebooksclub.net/128-oracle-plsql-by-example-4th-edition-prentice-hall.html
("Oracle PL/SQL By Example" - excellent).
Bonne nuit.