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 :

champs "COMPUTED BY" sous Oracle


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut champs "COMPUTED BY" sous Oracle
    Il m'a semblé voir que depuis la version 7.1, Oracle gérait les champs "COMPUTED BY".

    Or, en version 8.1, je n'arrive pas à en créer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE TEST
    (
    COL1 VARCHAR2(10),
    COL2 COMPUTED BY (COL1 || COL1)
    );
    renvoie le message suivant en positionnant le curseur juste avant "BY":

    ORA-00907: missing right parenthesis
    Bien entendu, la requête suivante renvoie exactement la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE TEST
    (
    COL1 VARCHAR2(10),
    COL2 COMPUTED BY (concatenate(COL1,COL1))
    );
    Par avance merci pour votre aide, y compris si elle consiste à me conseiller l'emploi de champs "AUTOMATIC" que je n'arrive pas non plus à mettre en place.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Bonjour et bienvenue,

    Merci de penser aux balises CODE et QUOTE à l'avenir règles du forum

    En effet, cela ne me dis rien du tout , qu'est ce que vous cherchez à faire exactement ? CREATE TABLE... AS SELECT... ne conviendrait il pas ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Toutes mes excuses, mais comme je ne suis pas développeur et un peu pris par le temps, j'avoue ne pas connaître le sens de ces balises [CODE] et [QUOTE]; je vais quand même creuser un peu pour la prochaine fois.

    Concernant mon problème, je souhaite simplement disposer, au sein de la même table, de champs destinés à la saisie, et d'autres, calculés et destinés à l'affichage, qu'il soient stockés (AUTOMATIC) ou non (COMPUTED BY).

    Pour la petite histoire, j'ai découvert les champs COMPUTED BY dans FirebirdSQL, et souhaite l'analogue sous Oracle.

    Encore merci pour votre aide.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par lespaul
    Toutes mes excuses, mais comme je ne suis pas développeur et un peu pris par le temps, j'avoue ne pas connaître le sens de ces balises ; je vais quand même creuser un peu pour la prochaine fois.
    Vous pouvez éditer votre premier message pour voir comment je l'ai modifié, ça devrait suffire à comprendre

    Citation Envoyé par lespaul
    Concernant mon problème, je souhaite simplement disposer, au sein de la même table, de champs destinés à la saisie, et d'autres, calculés et destinés à l'affichage, qu'il soient stockés (AUTOMATIC) ou non (COMPUTED BY).
    Là j'avoue que je ne vois pas bien comment faire et encore moins l'intérêt de le faire à la création alors que c'est si simple à la restitution

    Mais c'est pas grave, on peut contourner

    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
    SQL> create table test
      2  (
      3  COL1 VARCHAR2(10),
      4  COL2 VARCHAR2(20) )
      5  ;
     
    Table créée.
     
    SQL> CREATE OR REPLACE TRIGGER test_trg
      2  BEFORE INSERT OR UPDATE
      3  ON TEST
      4  REFERENCING NEW AS NEW OLD AS OLD
      5  FOR EACH ROW
      6  BEGIN
      7     :new.col2 := :new.col1 || :new.col1;
      8  END;
      9  /
     
    Déclencheur créé.
     
    SQL> insert into test(col1) values ('TOTO');
     
    1 ligne créée.
     
    SQL> select * from test
      2  ;
     
    COL1       COL2
    ---------- --------------------
    TOTO       TOTOTOTO
    je ne vois pas d'autre méthode que via un trigger

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Je suis partiellement d'accord.

    En effet, le trigger est équivalent si l'on choisit de stocker le champ calculé (AUTOMATIC), l'avantage restant quand même de n'avoir justement pas besoin de créer et maintenir ledit trigger.

    Par contre, si on choisit de ne pas stocker ce champ (COMPUTED BY), c'est à dire de le calculer à la volée, alors le trigger ne me semble pas ad'hoc, une solution approchante étant plutôt la vue; mais alors, au lieu de manipuler un objet (la table), on doit en manipuler 2 (la table pour la saisie et la vue pour l'affichage).

    Bref, je ne prétends pas que mon problème n'a aucune solution, mais je cherche à savoir si le principe de champ COMPUTED BY, qui me semble répondre exactement à mon besoin, est supporté par Oracle comme il m'a semblé le voir dans mes recherches sur le net.

    Bien entendu, si par souci de bienséance, il m'est demandé de considérer ma demande comme résolue, je m'y résoudrai...

    En attendant, je sollicite de la laisser non résolue encore quelques temps.

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    En effet, la vue serait plus intelligente, je n'y avais pas pensé

    D'après mes recherches, il n'existe pas de propritété COMPUTED BY après la v7

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Cette réponse confirme malheureusement mon soupçon de régression fonctionnelle d'Oracle.

    Cela étant, merci de m'avoir consacré ce temps.

    Si cela ne dérange pas, je vais quand même laisser durant quelque temps, à tout hasard, ce sujet non résolu.

    Bon week-end.

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    et bon week end

Discussions similaires

  1. Champs ftInteger reconnus en ftBCD par ADO sous Oracle
    Par pimousse9 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/06/2007, 16h47
  2. Réponses: 22
    Dernier message: 28/04/2006, 10h58
  3. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22
  4. Champ Image sous oracle
    Par smazaudi dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/06/2005, 08h56

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