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 15/05/2008, 09h23   #1
Invité de passage
 
Inscription : mai 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 8
Points : 1
Points : 1
Par défaut Stocker un select

Bonjour,

Je travaillais avant sous Sybase et j'avais pour habitude de faire toutes mes requêtes sous procédures stockées, pour faciliter la maintenance de mon client.

Je travaille maintenant sous Oracle, et je ne sais pas comment faire remonter un select à une procédure (a priori les fonctions ne peuvent renvoyer que des valeurs?).
J'ai bien pensé à faire une vue, mais mon problème reste entier puisque je devrai toujours envoyer le select du client, ce que j'aimerais autant éviter.

Merci de votre aide :-)
kyra78113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 09h28   #2
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Peux-tu mieux expliquer le contexte et les besoins s.v.p ?
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 09h34   #3
Invité de passage
 
Inscription : mai 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 8
Points : 1
Points : 1
Je cherche à faire du client le plus léger possible, donc aucune requête directement dans le client, uniquement de l'appel de procs.

C'était simple sous sybase puisqu'une procédure stockée peut se présenter
as
select champ1, champ2 from table where condition

et renvoyer les enregistrements (stockés ensuite dans un recordset sous vb6).

Je ne sais pas aujourd'hui comment reproduire la même chose sous oracle sans en passer par une vue, et donc une commande SQL directement dans le client.
kyra78113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 09h49   #4
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
Salut,
dans ce cas il faut faire une procédure que retourne un curseur ( sys_refcursor ).

Tu trouvera plein d'exemples sur ce forum...
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 09h58   #5
Invité de passage
 
Inscription : mai 2008
Messages : 8
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 8
Points : 1
Points : 1
Une proc peut renvoyer un curseur? Effectivement ça résout tout!

Merci beaucoup :-)
kyra78113 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 11h39   #6
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
petit exemple de syntaxe vite fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE 
Procedure maProc ( myOutCursor  OUT sys_refcursor )
AS
Begin
    Open myOutCursor FOR
    SELECT
            Col1
            , Col2
            , ...
    FROM    maTable
    WHERE   blablabla...   ;
 
End maProc ;
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa 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 16h53.


 
 
 
 
Partenaires

Hébergement Web