Fonction PL/SQL retournant contenu d'une table

Amar_Tchek Messages postés 21 Date d'inscription vendredi 28 décembre 2012 Statut Membre Dernière intervention 23 janvier 2016 - 23 janv. 2016 à 12:55
Amar_Tchek Messages postés 21 Date d'inscription vendredi 28 décembre 2012 Statut Membre 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.
A voir également:

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
23 janv. 2016 à 14:07
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...
0
Amar_Tchek Messages postés 21 Date d'inscription vendredi 28 décembre 2012 Statut Membre 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,
0
Rejoignez-nous