Fonction PL/SQL retournant contenu d'une table

Messages postés
21
Date d'inscription
vendredi 28 décembre 2012
Dernière intervention
23 janvier 2016
- 23 janv. 2016 à 12:55 - Dernière réponse :
Messages postés
21
Date d'inscription
vendredi 28 décembre 2012
Dernière intervention
23 janvier 2016
- 23 janv. 2016 à 14:24
Bonjour,
Travaillant actuellement sur une application .Net permettant de visuliser le contenu d'une table, je recontre des difficultés avec la fonction qui renvoi le contenu de la table.

J'utilise le webLogic server d'oracle pour interfacer la BD et l'application, j'ai une fonction qui retourne un enregistrement de la table voulu mais j'arrive pas à l'adapter pour qu'elle renvoie tous les enregistrements de la table.

J'ai utilisé les tableaux, les objects j'ai pas réussi à faire fonctionner le pipeline.

Voici la fonction qui retourne un enregistrement.


CREATE OR REPLACE TYPE DMD_REC AS OBJECT
(
matricule VARCHAR2(10),
nom VARCHAR2(15),
prenom VARCHAR2(15),
adresse VARCHAR2(10),
profile VARCHAR2(15),
service VARCHAR2(15),
date_dmd DATE
);


CREATE OR REPLACE FUNCTION aff_dmd
(dmd_mat IN VARCHAR2)
RETURN DMD_REC IS
dmd_found demande%rowtype;
dmd_rtn DMD_REC;
BEGIN
SELECT *
INTO dmd_found
FROM demande
WHERE demande.matricule=dmd_mat;
dmd_rtn := DMD_REC
(
dmd_found.matricule,
dmd_found.nom,
dmd_found.prenom,
dmd_found.adresse,
dmd_found.profile,
dmd_found.service,
dmd_found.date_dmd
);
RETURN dmd_rtn;
END aff_dmd;


Merci d'avance pour votre aide.
Afficher la suite 

Votre réponse

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 23 janv. 2016 à 14:07
0
Merci
Salut,

ta fonction retourne 1 seul enregistrement (RETURN DMD_REC)

Si tu veux retourner un resultset, regardes du coté des procédures
stockées qui prennent en paramètres un REF CURSOR (en output)

Tu devras ensuite le spécifier dans ta chaine de connexion (RESULTSET=TRUE) ou un truc du genre.

Voici un exemple :

CREATE OR REPLACE
PROCEDURE get_resultset (
    param1    IN  uneTable.unChamp%TYPE,
    p_resultset OUT SYS_REFCURSOR) 
AS
BEGIN 
  OPEN p_resultset FOR
    SELECT
            unChamp
    FROM  
            uneTable
    --WHERE  ...
    ORDER BY unChamp;
END
get_resultset ;



Pour les anciennes version d'oracle, il faudra remplacer SYS_REFCURSOR par un type utilisateur, par excemple :
TYPES.myRefCursorType

CREATE OR REPLACE PACKAGE types 
AS 
  TYPE myRefCursorType IS REF CURSOR;
END Types;



Bye...
Messages postés
21
Date d'inscription
vendredi 28 décembre 2012
Dernière intervention
23 janvier 2016
- 23 janv. 2016 à 14:24
Merci pour ta réponse yann_l_san, juste quelques questions encore:

Pourrais-récupérer tous les enregistrements de la table avec cette procédure sans préciser de clause WHERE?

J'utilise Oracle 11g R2 ta solution peut-elle être exporté comme un webservice?

Cordialement,
Commenter la réponse de yann_lo_san

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.