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

Oracle Discussion :

Oracle 9i : récupérer la valeur d'un champ de type "LONG"


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut Oracle 9i : récupérer la valeur d'un champ de type "LONG"
    Salut,

    Je souhaite faire une requête de ce style

    SELECT FROM table WHERE field1 LIKE '%pattern'

    Or, field1 est de type "long" donc j'obtiens une erreur "number attendu"

    Comment feriez vous ?

    Le contenu de ce champ field1 est celui du 'search_condition' de ALL_CONSTRAINTS.

    Merci à vous, bonne soirée !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vous pouvez créer une une table temporaire pour transformer la colonne LONG en CLOB et utiliser ensuite DBMS_LOB ou une autre API en fonction du language utilisé.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    merci.

    Je travaille directement sous pl/sql, et mon but est d'extraire le contenu d'une contrainte WHERE constraint_type = 'C' (de type check) afin d'éventuellement détecter un check "IS NOT NULL" sur x colonnes.

    Pensez-vous qu'il y ait une autre méthode (à tout hasard) pour valider une check constraint de ce type ?

    Merci, bonne journée.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Vous pouvez utiliser la fonction suivante qui transforme le LONG en VARCHAR2 car il est problable que le texte de la contrainte est inférieur à 32K:

    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
    43
    44
    45
     
    dev001> drop table t;
     
    Table dropped.
     
    dev001>
    dev001> create table t (x int primary key);
     
    Table created.
     
    dev001>
    dev001> alter table t add constraint c check (x > 0);
     
    Table altered.
     
    dev001>
    dev001> create or replace function longsubstr( p_constraint_name in varchar2)
      2                                         return varchar2
      3  as
      4     l_tmp long;
      5  begin
      6     select search_condition into l_tmp from user_constraints where constrain
    t_name = p_constraint_name;
      7     return substr( l_tmp , 1, 32767);
      8  end;
      9  /
     
    Function created.
     
    dev001> show errors
    No errors.
    dev001>
    dev001> select table_name, constraint_type, longsubstr(constraint_name) from use
    r_constraints where table_name = 'T';
     
    TABLE_NAME                     C
    ------------------------------ -
    LONGSUBSTR(CONSTRAINT_NAME)
    --------------------------------------------------------------------------------
     
    T                              P
     
     
    T                              C
    x > 0

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Merci, ça marche super.

    Je suis très surpris que dans une fonction substr fonctionne, alors que directement dans une requête ce n'est pas le cas.

    En tout cas, merci
    a+

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

Discussions similaires

  1. [2.x] Récupérer la valeur par un champ de type file
    Par bakh yaye dans le forum Symfony
    Réponses: 2
    Dernier message: 09/05/2012, 12h09
  2. Récupérer la valeur d'un champ de type énuméré
    Par warzas dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 07/11/2007, 10h00
  3. Réponses: 1
    Dernier message: 22/02/2005, 23h40
  4. Récupérer la valeur d'un champ disabled
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2005, 10h45
  5. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45

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