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 :

Syntaxe varchar(20) et varchar2(20 char)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut Syntaxe varchar(20) et varchar2(20 char)
    Bonjour.

    je suis confronté à un petit pb de compatibilité entre les bases de données.

    les développeurs utilisent sur leur poste la base Derby (ce qui permet d'avoir des tests unitaire indépendant de toute infrascruture)

    et les plateforme de d'intégration recette et production utilisent Oracle
    nous avons de très nombreux petits projets qui ont tous au moins 1 script sql associé.
    nous aimerions éviter d'avoir à écrire plusieurs fois ces scripts (1pour derby 1 pour oracle)

    le problème vient de varchar

    derby supporte SQL92T soit donc les syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHARACTER VARYING(14),
    CHAR VARYING(14),
    VARCHAR(14)
    oracle lui utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHARACTER VARYING(14 CHAR),
    CHAR VARYING(14 CHAR),
    VARCHAR2(14 CHAR)
    juste pour ce détail il m'est pour le moment impossible d'avoir un script unique pour la création des tables. il me faut systématiquement une version oracle et une version derby.

    si j'utilise la syntaxe de derby sur oracle j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHARACTER VARYING(14 BYTE),
    CHAR VARYING(14 BYTE),
    VARCHAR2(14 BYTE)
    Or étant en utf-8 cela ne corresponds pas à mon besoin. en effet "éosine aqueuse" par exemple fait 14 chars mais 15 bytes.

    existe-t-il un moyen de paramétrer mon schémas oracle pour que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CHARACTER VARYING(14),
    CHAR VARYING(14),
    VARCHAR(14)
    crée par défaut des chars et non des bytes ?

    Merci
    A+JYT

  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
    Non.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    les développeurs utilisent sur leur poste la base Derby (ce qui permet d'avoir des tests unitaire indépendant de toute infrascruture)
    Pourquoi ne pas utiliser Oracle Express Edition qui est gratuit et facilement installable sur les postes des développeurs.

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par sekaijin Voir le message
    ...les développeurs utilisent sur leur poste la base Derby (ce qui permet d'avoir des tests unitaire indépendant de toute infrascruture)

    et les plateforme de d'intégration recette et production utilisent Oracle...
    Une telle organisation n'a aucune chance de fonctionner !

    Les différents SGBD diffèrent notamment par les types de données qu'ils supportent (par exemple CURRENCY chez l'un, pas chez l'autre), par leurs fonctions natives, par leurs mécanismes transactionnels, par leur degré de respect des normes SQL...

    Si la prod fonctionne avec le SGBD X, le développement doit se faire sur ce même SGBD.
    Comme le suggère skuatamad, vous pouvez utiliser Oracle Express qui est 100% gratuit, ou Oracle Personal Edition, qui est très accessible (de l'ordre de 150 € par poste).

    Croire que les SGBD sont interchangeables (et qu'on peut bricoler sans un minimum de formation) est un leurre aux conséquences très graves.

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    mes besoins dans chaque projet sont particulièrement léger

    integer et varchar éventuellement char.

    j'imagine assez mal un serveur d'intégration continue qui sur des centaine de petits projets vas à la volé installer un serveur oracle créer des user et des schémas passer des script pour enfin pouvoir lancer des test junits qui font un pauvre sélect sur une table à trois colonne.

    croire que mettre l'artillerie lourde partout est une solution est pour moi tout aussi fou que de penser que les SGBD peuvent être 100% interchangeable.

    ma question ne porte que sur un point très précis car c'est le seul et unique point de blocage pour avoir un script qui s’exécute sur Derby et sur Oracle.

    Au pire on fera un utilitaire qui remet en Ansi SQL92 les scripts avant de les exécuter. Mais s'il y a une solution avec du paramétrage ce sera tout de même mieux.

    A+JYT

  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
    Citation Envoyé par sekaijin Voir le message
    ...Mais s'il y a une solution avec du paramétrage ce sera tout de même mieux.

    A+JYT
    Il n'y en a pas.

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il faut positionner le paramètre NLS_LENGTH_SEMANTICS à CHAR et non BYTE.

  8. #8
    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
    Il n'y en a pas

    Citation Envoyé par Rei Ichido Voir le message
    Il faut positionner le paramètre NLS_LENGTH_SEMANTICS à CHAR et non BYTE.

  9. #9
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par Rei Ichido Voir le message
    Il faut positionner le paramètre NLS_LENGTH_SEMANTICS à CHAR et non BYTE.
    J'avais immédiatement pensé à cette solution ce matin en lisant la question, et je me suis dit que j'allais l'accompagner d'une petite démonstration.
    Le souci, c'est que cette modification n'avait pas l'effet attendu.

    La doc vient de m'apprendre que les sessions SYS ne prennent pas en compte le paramètre NLS_LENGTH_SEMANTICS, et fonctionnent en mode BYTE sauf si on indique explicitement CHAR à la création de la colonne.

    Ca m'apprendra à tester sous SYS !
    Sous un compte lambda, ça fonctionne effectivement sans souci...

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

Discussions similaires

  1. a varchar2(2 char):= '&3';
    Par snake13 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 14/06/2010, 09h57
  2. Convertir VARCHAR2 en CHAR
    Par iiban dans le forum PL/SQL
    Réponses: 2
    Dernier message: 19/08/2009, 11h29
  3. varchar varchar2 char
    Par fantomas261 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/05/2007, 12h25
  4. Erreur de syntaxe VARCHAR NOT NULL
    Par goofiot dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/03/2006, 22h59
  5. varchar devient char
    Par airwolf dans le forum Outils
    Réponses: 2
    Dernier message: 08/02/2004, 01h35

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