Bonjour,
J'aurais voulu savoir si il était possible de faire l'intersection de deux curseurs ou bien par quelle méthode je pourais resortir les lignes identiques aux deux curseurs?
Emilie
Version imprimable
Bonjour,
J'aurais voulu savoir si il était possible de faire l'intersection de deux curseurs ou bien par quelle méthode je pourais resortir les lignes identiques aux deux curseurs?
Emilie
Qu'est-ce qu'un curseur?
Il serait important que tu donne un exemple de Sql
:)
un curseur est une zone de travail pour exécuter les ordres SQL, stocker leurs résultats et les utiliser. Il permet de traiter le résultat de requetes retournant plus d'un tuple.
voici mon code:
et dans mon package de spec :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 create or replace package body bdtheque as procedure recherche_multi_critere3 (le_titrealbum in varchar2, la_couleur in varchar2, la_dateparution in date, le_numalbum in number, l_appreciation in number, le_nomauteur in varchar2, le_prenomauteur in varchar2, le_nomdessin in varchar2, le_prenomdessin in varchar2, le_nomgenre in varchar2, le_nomtype in varchar2, le_titreserie in varchar2, le_nomcollect in varchar2, le_nomediteur in varchar2,liste_album_titre out cur_album, liste_album_couleur out cur_album, liste_album out cur_album) is begin set transaction read only; if (le_titrealbum is null) then open liste_album_titre for select * from album; else open liste_album_titre for select * from album where titrealbum = le_titrealbum; end if; if (la_couleur is null) then open liste_album_couleur for select * from album; else open liste_album_couleur for select * from album where couleur = la_couleur; end if; commit; exception when others then rollback; raise_application_error(-20999,'inatendue'||'sqlcode :'||sqlcode||'message : '||substr(SQLERRM,1,100)); end; end; /
après avoir rempli les deux curseur j'aurais aimé pouvoir en sortir les lignes identiques.Code:
1
2
3
4
5
6
7
8
9 create or replace package bdtheque as type cur_album is ref cursor; procedure recherche_multi_critere3(le_titrealbum in varchar2, la_couleur in varchar2, la_dateparution in date, le_numalbum in number, l_appreciation in number, le_nomauteur in varchar2, le_prenomauteur in varchar2, le_nomdessin in varchar2, le_prenomdessin in varchar2, le_nomgenre in varchar2, le_nomtype in varchar2, le_titreserie in varchar2, le_nomcollect in varchar2, le_nomediteur in varchar2,liste_album_titre out cur_album, liste_album_couleur out cur_album, liste_album out cur_album); end; /
émilie
Sauf a vouloir ecrire la requete la moins performante possible, il faut mieux n'ouvrir qu'un seul curseur, retournant l'intersection entre deux ensembles de donnees, concretement: SELECT FROM A INTERSECT SELECT FROM B.