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 :

SQLERRM:ORA-00932: types de données incohérents ; attendu : - ; obtenu : -


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut SQLERRM:ORA-00932: types de données incohérents ; attendu : - ; obtenu : -
    Bonjour

    Je rencontre l'erreur
    SQLERRM:ORA-00932: types de données incohérents ; attendu : - ; obtenu : -


    La requete SQL fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM (SELECT '18993','[T.S4A.S4A.RJDLK.001.QAG QTPYTL, T.S4A.S4A.RJDLK.001.QAP QTPYTL]' from dual);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MAIS PAS LE EXECUTE IMMEDIATE
      v_tmpS:='(SELECT ''18993'',''[T.S4A.S4A.RJDLK.001.QAG QTPYTL, T.S4A.S4A.RJDLK.001.QAP QTPYTL]'' from dual)';
     EXECUTE IMMEDIATE 'SELECT * FROM' || v_tmpS INTO v_tmpS2;

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Tu devrais surement préciser la nature de "v_tmpS2".
    Qu'est ce donc? Un Type?

    @+

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut
    bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     v_tmpS2      varchar2(30000);
    Mon soucis vient du fait que le nombre de colonnes est dynamique

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Je ne sais pas à quoi cela sert, mais ça à l'air sympa

    Je ne crois pas que pouvoir stocker tes résultats dans des variables ou un Type si le nombre de colonnes retournées est dynamique soit "direct".
    La première chose que j'imaginerais est de stocker plutôt dans une collection.
    Avec qqchose comme:

    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
     
    CREATE OR REPLACE TYPE store_some_char AS TABLE OF VARCHAR2 (500 CHAR);
    /
     
     
    /* ---- */
    DECLARE
       temp_store       store_some_char;
       temp_model_sql   VARCHAR2 (500 CHAR)
                           DEFAULT '(SELECT ''18993'' value1,''[T.S4A.S4A.RJDLK.001.QAG QTPYTL, T.S4A.S4A.RJDLK.001.QAP QTPYTL]'' value2 from dual)';
       dyn_sql          VARCHAR2 (500 CHAR);
    BEGIN
       dyn_sql := 'SELECT store_some_char(value1, value2) FROM' || temp_model_sql;
       DBMS_OUTPUT.put_line (dyn_sql);
     
       EXECUTE IMMEDIATE dyn_sql INTO temp_store;
     
       FOR i IN 1 .. temp_store.COUNT
       LOOP
          DBMS_OUTPUT.put_line (temp_store(i));
       END LOOP;
    END;
     
    /* -- ou bien même: -- */
    DECLARE
       temp_store   store_some_char;
       dyn_sql      VARCHAR2 (500 CHAR)
                       DEFAULT 'SELECT store_some_char(''18993'',''[T.S4A.S4A.RJDLK.001.QAG QTPYTL, T.S4A.S4A.RJDLK.001.QAP QTPYTL]'') from dual';
    BEGIN
       DBMS_OUTPUT.put_line (dyn_sql);
     
       EXECUTE IMMEDIATE dyn_sql INTO temp_store;
     
       FOR i IN 1 .. temp_store.COUNT
       LOOP
          DBMS_OUTPUT.put_line (temp_store (i));
       END LOOP;
    END;
    Cela implique que tous les enregistrements sont du même type (varchar2 ici), ou peuvent être casté vers le même type.

    Sinon, il y a l'option de faire un DBMS_SQL.parse sur ton SQL dynamique, récupérer toutes les infos nécessaires sur les colonnes retournées par ce SQL, puis créer un type dynamique via ANYTYPE / ANYDATASET.
    C'est un peu plus "sport", je pense.

    Peut être qqu'un d'autre aura une meilleure idée ...

    @+

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 716
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 716
    Par défaut
    Merci, je te dis si cela est ok Jeudi, car je ne suis pas au bureau en debut de semaine !
    Pour info la requete SQL est plus longue, ce sont des noms de file IBM MQ entre plusieurs applications

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Pour récupérer des résultats dynamiques, vous pouvez passer par un sys_refcursor, obtenir son cursor number via dbms_sql.to_cursor_number et ensuite vous avez accès à la description des colonnes via dbms_sql.describe_columns, en bouclant sur le nombre de colonnes vous pouvez faire un dbms_sql.define_column et ensuite en bouclant sur dbms_sql.fetch_rows vous récupérez les valeurs via dbms_sql.column_value...

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

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