IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

CURSOR sur un TYPE perso


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut CURSOR sur un TYPE perso
    Bonjour

    Voici ma fonction en PL/SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace function getAllSubFundVersions
    	   return TT_SUBFUND_VERSIONED  PIPELINED as
    	   
    BEGIN
    	FOR cur in ( SELECT *
    			 FROM SUBFUND
    			ORDER BY ID_)
    	LOOP
    		PIPE ROW(cur);
    	END LOOP; 
    	RETURN;
    END;
    /
    Elle plante sur la ligne rouge:
    Function PLS-00382: expression is of wrong type

    voici la creation de mes types perso:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TYPE T_SUBFUND AS OBJECT(
        ID_ INT,
        NAME_ VARCHAR2(60 BYTE),
    	MAJORCLASS_ID_ INT,
    	ROLLALGO_ VARCHAR2(10),
    	EXPIRYNUMBER_ INT,
    	ROLLLAG_ INT,
    	VALOLAG_ INT,
    	STRATEGY_ VARCHAR2(10),
        CRETIME_ DATE
    ) NOT FINAL;
    /
    CREATE TYPE TT_SUBFUND AS TABLE OF T_SUBFUND;
    /
    CREATE TYPE T_SUBFUND_VERSIONED UNDER T_SUBFUND(
        CREUSER_ NUMBER(11),
        FROM_ DATE,
        TO_ DATE
    )FINAL;
    /
    CREATE TYPE TT_SUBFUND_VERSIONED AS TABLE OF T_SUBFUND_VERSIONED;
     
    CREATE TABLE SUBFUND OF T_SUBFUND_VERSIONED;
    /

    La question est:
    Comment créer un cursor d'un type précis? ici du type T_SUBFUND_VERSIONED.

    En cherchant sur let net, j'ai trouvé mention de REF CURSOR mais je comprend pas du tout comment ca marche.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Voilà un article sur les fonctions pipelined qui t’aidera à comprendre ton erreur. Ensuite un autre lien plus proche de ce que t’essayes de faire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut
    Mon probleme est que je devrais faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create or replace function getAllSubFundVersions
    	   return TT_SUBFUND_VERSIONED  PIPELINED as
     
    BEGIN
    	FOR cur in ( SELECT *
    			 FROM SUBFUND
    			 ORDER BY ID_)
    	LOOP
    		PIPE ROW(T_SUBFUND_VERSIONED(cur.ID_, cur.NAME_, cur.MAJORCLASS_ID_, cur.ROLLALGO_,cur.EXPIRYNUMBER_, cur.ROLLLAG_, cur.VALOLAG_, cur.STRATEGY_, cur.CRETIME_, cur.CREUSER_, cur.FROM_, cur.TO_));
    	END LOOP; 
    	RETURN;
    END;
    /
    mais c'est lourd, donc je voudrais directement faire
    ou quelque chose d'aussi 'simple'

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par escafr Voir le message
    ...
    mais c'est lourd, donc je voudrais directement faire
    ou quelque chose d'aussi 'simple'
    Tu sait parfois il est nécessaire de bosser un peu .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 224
    Par défaut
    non mais je trouve ca fout, qu'on ne puisse pas faire ca d'une maniere ou d une autre!!

    c'est qd meme relativement basique comme besoin, et comme je suis pas expert oracle; je pensais juste que c'etait due a une erreur de ma part...

    Mais bon, si je n'ai pas le choix de "bosser un peu".. La seule difference c'est que je dois 'bosser un peu' pour 20 fonctions... m'enfin...

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Bref, si tu pourrais nous indiquer de quelle manière Oracle pourrait savoir que le curseur cur est (et restera) toujours compatible avec l’objet T_SUBFUND_VERSIONED …
    Mais si tu y tiens vraiment, dans ton cas précis, tu pourrais envisager d’écrire un autre constructeur pour ton objet pour qu’il accepte un curseur.

Discussions similaires

  1. ordered_set sur type perso
    Par befalimpertinent dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/06/2010, 10h06
  2. [Debutant]reallocation de memoire d'un tableau de type perso
    Par killerjeff dans le forum Débuter
    Réponses: 3
    Dernier message: 04/08/2004, 17h09
  3. informations sur le type interval dans interbase
    Par devalender dans le forum InterBase
    Réponses: 6
    Dernier message: 03/06/2004, 10h29
  4. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55
  5. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo