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

SQL Oracle Discussion :

Curseur + Type Erreur:ORA-00932: inconsistent datatypes: expected - got -


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut Curseur + Type Erreur:ORA-00932: inconsistent datatypes: expected - got -
    Bonjour,

    J'ai realise les fonctions suivantes (je les ai simplifie pour une meilleur comprehension de mon probleme):
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    create type SERVICE_CUSTOMER as object (SERVICE_TYPE_NAME VARCHAR2(255), SERVICE_NAME VARCHAR2(255), CUSTOMER_NAME VARCHAR2(255));
    /
     
    create type LIST_SERVICE as table of SERVICE_CUSTOMER;
    /
     
     
    CREATE OR REPLACE FUNCTION GET_REQ_SERVICE
    RETURN SYS_REFCURSOR
    IS
    l_ref SYS_REFCURSOR;
    test VARCHAR2(500);
    BEGIN
    	test := 'select distinct ST.NAME as SERVICE_TYPE_NAME, ST.NAME as SERVICE_NAME, ST.NAME as CUSTOMER_NAME
    	from service_type ST';
    	open l_ref FOR test;
    	return l_ref;
    END GET_REQ_SERVICE;
    /
     
     
    CREATE OR REPLACE FUNCTION GET_SERVICES_INFO 
    RETURN LIST_SERVICE PIPELINED
    IS 
    l_ref2 SYS_REFCURSOR;
    -- SERVICE_CUSTOMER -> SERVICE_TYPE_NAME, SERVICE_NAME, CUSTOMER_NAME
    RES SERVICE_CUSTOMER := SERVICE_CUSTOMER(null,null,null);
    RES_CURS SERVICE_CUSTOMER; 
    BEGIN
    l_ref2 := GET_REQ_SERVICE;
    LOOP
    FETCH l_ref2 into RES_CURS;
    EXIT WHEN l_ref2%notfound;
    RES.SERVICE_TYPE_NAME := RES_CURS.SERVICE_TYPE_NAME;
    		RES.SERVICE_NAME := RES_CURS.SERVICE_NAME;
    		RES.CUSTOMER_NAME := RES_CURS.CUSTOMER_NAME;
    		PIPE ROW (RES);
    END LOOP;
    CLOSE l_ref2;
    return;
    END GET_SERVICES_INFO;
    /
    Lorsque j'execute cette requete, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select * from table (GET_SERVICES_INFO);
    ERROR at line 1:
    ORA-00932: inconsistent datatypes: expected - got -
    ORA-06512: at "INVENTORY.GET_SERVICES_INFO", line
    Apres avoir passe pas mal de temps a chercher d'ou venais le probleme, je l'ai finallement trouve: c'est la ligne "FETCH l_ref2 into RES_CURS;" qu'il n'aimait pas.
    J'ai donc remplace mon res_curs par 3 variables VARCHAR2(255), ce qui m'a permis de resoudre mon probleme.

    Par contre, je ne comprends toujours pas pourquoi oracle n'a pas aime quand j'ai utilise la variable RES_CURS de type SERVICE_CUSTOMER dans le fetch ... into?
    N'est-il pas possible de l'utiliser?

  2. #2
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Quelle est la version d'Oracle ?

    Il faudrait essayer si cela marche en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FETCH l_ref2 into RES_CURS.SERVICE_TYPE_NAME, RES_CURS.SERVICE_NAME, RES_CURS.CUSTOMER_NAME

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut
    J'utilise la version oracle 10.2.0.1

    Je viens de tester ce que tu as propose et ca marche nickel (je viens de changer mon code en consequence).
    Par contre ca ne m'explique toujours pas pourquoi ca n'a pas marche avec directement une variable contenant les 3 types.

  4. #4
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    De mémoire, je pense que cela ne marche pas car tu es en SQL Dynamique et donc Oracle ne sait pas (encore) faire un fetch d'un curseur construit dynamiquement dans une collection en direct, il faut lui préciser chacun des éléments.

    Par contre, avec un curseur explicite, cela marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    declare
    CURSOR C_TEST IS
    SELECT champa, champb, champc
    from table
    where mykey = myvalue;
    V_TEST C_TEST%ROWTYPE;
    BEGIN
       OPEN C_TEST;
       FETCH C_TEST into V_TEST;
       CLOSE C_TESt;
    END;

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut
    Merci pour la reponse, c'est tout a fait possible que ce soit du au curseur dynamique. Je ne sais pas bien comment fonctionne oracle mais ca peut-etre logique .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ORA-00932: inconsistent datatypes: expected %s got %s
    Par labolabs dans le forum PL/SQL
    Réponses: 0
    Dernier message: 26/08/2009, 12h12
  2. Réponses: 6
    Dernier message: 16/04/2008, 12h01
  3. Erreur ORA-00932 types de données incohérents
    Par paradeofphp dans le forum Oracle
    Réponses: 7
    Dernier message: 21/05/2007, 10h56
  4. ORA-932 : inconsistent datatypes
    Par fulub dans le forum Oracle
    Réponses: 5
    Dernier message: 16/03/2007, 09h12
  5. [OEM 2.2.0.0.0] ORA-00932: inconsistent datatypes
    Par shnouf dans le forum Oracle
    Réponses: 19
    Dernier message: 07/02/2006, 15h33

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