|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2007 Messages : 79 ![]() |
Bonjour à tous,
J'ai une questionqui certainement vous semblera à tous très facile !! J'ai créé une procédure qui fait des INSERT et des UPDATE dans une table. Jusque là tout va bien. Là où ça pose problème c'est que je souhaite récupérer en sortie la table en question. Voilà ce que je voudrais faire : Declare -- variables et curseurs Begin --Insert et Update dans MA_TABLE /*partie qui ne fonctionne pas */ select * from MA_TABLE; end; Je suis sous Orable 9i et pour répondre à la question qui brule vos levres : je suis obligée de passer parce biais car j'utilise derrière un outil de décisionnel qui demande que les procédures renvoient des valeurs pour fonctionner. Merci par avance pour votre aide et n'hésitez pas à poser des questions si je n'est pas été claire !! @+ |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : septembre 2007 Messages : 25 ![]() |
Si j'ai bien compris ce que tu veux, il te faut utiliser une fonction et renvoyer un curseur sur ta table.
1)il te faut créer un type (dans ton package, si tu en as un ou dans un nouveau) pour la référence de curseurqu’on va renvoyer create or replace package Types AS type curseur_type is ref cursor; end Types; 2) ta fonction ressemblerait à : create or replace function maFonction() return Types.curseur_type is monCurseur Types.curseur_type; begin open monCurseur for select * from MA_TABLE; return monCurseur; end; |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2007 Messages : 79 ![]() |
Merci pour l'info, je teste de ce pas !!!
Juste une précision : peut-on appeler une fonction dans une procédure ? Pourquoi ? Parce que forcément mon outil décisionnel n'accepte que les procédures stockées et pas autres choses @+ Darcynette |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : septembre 2007 Messages : 25 ![]() |
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2007 Messages : 79 ![]() |
euh...
Je comprends pas comment utiliser la fonction dans ma procédure... d'après les docs, il faut affecter la fonction à une variable ! Je pensais utiliser un curseur mais du coup, je ne vois pas comment afficher le résultat de ma fonction Si quelqu'un peut encore m'aider Merci Darcynette |
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : février 2003 Messages : 7 ![]() |
essaye ceci
Code :
|
||
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2007 Messages : 79 ![]() |
Ca marche !!!
![]() Merci pour votre aide, j'ai une épine dans le pied en moins !! @+ Darcynette |
|
|
00
|
|
|
#8 | ||
|
Invité régulier
![]() Inscription : février 2003 Messages : 28 ![]() |
Bonjour,
Curieux de creuser également ce problème j'ai créé (comme expliqué sauf erreur de ma part... Code :
ensuite, si je fais un j'obtiens une erreur "ORA06-553 : numéro ou type d'arguments erronés dans appel sp_lit_table()... Et, dernière chose pour ma gouverne personnelle, dans une procédure stockée MySQL (je ne recherche pas la polémique dans cette salle Oracle ), en plus des paramètres IN et OUT je peux faire des pour retourner tout simplement un résultat. Quelle justification pouvez vous me donner pour Oracle de ne pas le permettre (aussi simplement) ?D'avance, merci |
||
|
|
00
|
|
|
#9 | ||||||||||||||
|
Invité régulier
![]() Inscription : février 2003 Messages : 28 ![]() |
Voici ma réponse à ma question
Tout d'abord, en préambule, je crée un type personnalisé : un curseur Code :
1ère possibilité (fct simple) : Code :
Code :
2ème possibilité (procédure simple) : Code :
Code :
3ème possibilité (procédure qui englobe la 1ère fonction) : Code :
Code :
![]() Voili, voilou... ![]() Bon c'est peut être trivial pour les habitués, mais pour les gens qui viennent d'autres bases de données ("MySQL" ou "SQL Server"/"Transact SQL" par exemple pour ne pas les nommer) le problème n'est pas des plus simples à résoudre (vu que dans les autres SGBD cela se fait de manière immédiate). J'aurais donc bien aimé trouver directement un exemple simple de ce type dans la FAQ... Si quelqu'un à un peu de temps dispo, libre à lui d'intégrer mon message dans la FAQ pour d'autres personnes.... |
||||||||||||||
|
|
00
|
|
|
#10 | |||||
|
Membre habitué
![]() |
Bonjour.
Je relance la discussion parce que j'ai essaiéce que JCD a conseillé mais ça n'a pas marché. J'ai utilisé la première solution : Code :
Ensuite : Code :
Et puis quand je fais : Ca me retourne l'erreur : Citation:
J'utilise Oracle 8 pour information. Merci d'avance.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... " |
|||||
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : février 2003 Messages : 28 ![]() |
@ilalaina : Mes tests étaient effectués avec Oracle 10 XE, je pense que ton problème est lié à cette différence de version.
Il me semble vaguement me souvenir avoir vu quelque chose sur la disponibilité de retour d'un ensemble d'enregistrements à partir de Oracle "N", mais je ne souviens plus ni où, ni quand, et je ne suis plus très sur de ce détail... ;-( Je te conseille de faire des recherches dans ce sens. Bon courage. |
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() |
J'ai recherché tout l'après midi, mais je n'ai pas trouvé un moyen d'effectuer un retour de collection ou d'enregistrement avec Oracle 8.
J'ai alors deux solutions :
Un conseil les experts?
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... " |
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : février 2003 Messages : 28 ![]() |
J'ai effectué sur google une recherche rapide avec les termes : "pl/sql" recordset "oracle 8"
A priori Oracle8 le permet, google m'a notamment retourné cette adresse : http://vbcity.com/page.asp?p=chapter...oks-wrox-vbora A creuser... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com