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 :

Spécialisation et Référence (bdd objet)


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiante
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiante
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut Spécialisation et Référence (bdd objet)
    Bonjour,

    Comme l'indique le titre, je travaille actuellement sur une base de données objet et je voudrais :
    • Créer un type NomType0
    • Créer une table NomTable0 de NomType0
    • Créer un type NomType1
    • Créer un type NomType2 qui spécialise NomType1, ce type contient un attribut qui est une référence à NomType0
    • Créer une table objet NomTable1 composée de NomType2
    • Faire des insertions dans NomTable1


    Ce qui donne pour l'instant en SQL :
    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
     
    CREATE TYPE NomType0  AS OBJECT(
    Libelle CHAR(30), 
    Niveau CHAR(30),
    Groupe Groupe_T); //Groupe_T est un type
     
    CREATE TABLE NomTable0 OF NomType0 (primary key(Libelle, Niveau))
    NESTED TABLE Groupe STORE AS Groupeobjet_tab
     
    CREATE TYPE NomType1 AS OBJECT (
    Num CHAR(5), 
    Nom VARCHAR(30), 
    Prenom VARCHAR(30), 
    Annee Annee_T, 
    Adresse Adresse_T) not final;
     
    CREATE TYPE NomType2 UNDER NomType1 (
    NumC char(10),
    Curs REF NomType0 
    ) final;
     
    CREATE TABLE NomTable1 OF NomType2;
     
    INSERT INTO NomTable1 
    VALUES ('00000', 'nom', 'prenom', Annee_T(1900), Adresse_T('12', 'rue de Rennes', 'Paris'),'1045534', NULL);
     
    UPDATE NomTable1  SET Curs = (SELECT  REF(c) FROM NomTable0 c WHERE c.Libelle = 'libel' AND c.Niveau = 'niv') WHERE NumC = '1045534';
    Le problème c'est que l'insertion dans NomTable1 ne fonctionne pas et je ne parviens pas à voir pourquoi. J'ai bien des données dans Nomtable0 donc à priori ce n'est pas ça.

    Peut-être auriez-vous une piste ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ça fonctionne ce genre d'horreur ?

    Une clé primaire composée de deux VARCHAR(30), c'est contre performant déjà dans un SGBDR classque alors en SGBDO, j'imagine que ça ne doit pas être mieux !

    Je n'avais pas enore vu de code pour les BDDo mais ça ne me donne pas envie de m'y mettre !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiante
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiante
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut
    Initialement, la clé primaire était un Integer auto-incrémenté mais ça a dû être enlevé. Je cherche l'erreur au niveau de la structure, mieux vaut ne pas faire attention au type des champs pour le moment car ils ne sont pas définitifs.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par Padmee Voir le message
    Le problème c'est que l'insertion dans NomTable1 ne fonctionne pas et je ne parviens pas à voir pourquoi.
    Il faut convertir vos données dans les nouveaux types que vous venez de créer, quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO NomTable1
    VALUES ('00000', NomType1('nom', 'prenom', Annee_T(1900), Adresse_T('12', 'rue de Rennes', 'Paris'),'1045534', NULL));
    Citation Envoyé par CinePhil Voir le message
    Une clé primaire composée de deux VARCHAR(30), c'est contre performant déjà dans un SGBDR classique
    Sur Oracle ça ne change rien, donc attention aux généralisations !

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiante
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiante
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut
    Merci pour la réponse !
    Pour le "Il faut convertir vos données dans les nouveaux types", c'est à dire que je dois à la fois convertir les données en NomType1 puis NomType2 ?

    J'ai essayé en convertissant les données en NomType1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO NomTable1 
    VALUES (NomType1('00000', 'nom', 'prenom', Annee_T(1900), Adresse_T('12', 'rue de Rennes', 'Paris')),'1045534', NULL);
    Et j'obtiens l'erreur ORA-00947: not enough values alors qu'il y a bien 5 données dans le NomType1 et 7 au niveau de NomType2.

    Lorsque que j'essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO NomTable1
    VALUES (NomType2('00000', 'nom', 'prenomm', Annee_T(1900), Adresse_T('12', 'rue de Rennes', 'Paris'),'1045534', NULL));
    L'insertion marche mais l'erreur persiste au moment du update (ORA-00904: "C": invalid identifier).

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/04/2014, 15h34
  2. Réponses: 8
    Dernier message: 11/07/2006, 17h27
  3. [VB6] faire référence à un objet situé sur un autre form
    Par coyott dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/05/2006, 15h13
  4. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

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