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 :

Creation de TYPE


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 8
    Par défaut Creation de TYPE
    Bonjour à tous,

    J'ai une question que je n'arrive pas à résoudre depuis ce matin et je vous la soumet car cela me travaille un peu...

    Je voudrais créer un type de données à ma base oracle, un vulgaire type de tableau de varchar.

    Là je me mets à utiliser la fonction CREATE TYPE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(2000) INDEX BY INTEGER
    L'instruction se déroule sans erreur sauf que visiblement impossible d'utiliser ce type: d'après oracle, il n'est pas reconnu.

    Je vire alors l'indexation...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(2000)
    Et là miracle cela fonctionne!!!

    Quelqu'un pourrait-il m'expliquer ce miracle et pourquoi l'indexation de ma table qui m'est nécessaire fait planter la création de ce type?

    Je vous remercie pour les lumières que vous pouvez m'apporter.

    Cordialement.

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Citation Envoyé par aulanerk
    Là je me mets à utiliser la fonction CREATE TYPE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(2000) INDEX BY INTEGER
    C'est impossible que tu n'es pas d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(2000) INDEX BY INTEGER;
      2  /
    Warning: Type created with compilation errors.
     
    SQL> show err
    Errors for TYPE VAR_ARRAY:
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    0/0      PL/SQL: Compilation unit analysis terminated
    1/19     PLS-00315: Implementation restriction: unsupported table index
             type
    => Un tableau ne peut pas être indexé en integer en PL/SQL (binary_integer éventuellement)

    Et de toutes façons il n'est pas possible d'indexé un type basé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> CREATE OR REPLACE TYPE VAR_ARRAY AS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
      2  /
    Warning: Type created with compilation errors.
     
    SQL> show err
    Errors for TYPE VAR_ARRAY:
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    0/0      PL/SQL: Compilation unit analysis terminated
    1/19     PLS-00355: use of pl/sql table not allowed in this context
    Une solution de contournement est de passer par un type déclaré dans un package.

    NB : merci à l'avenir de préciser votre version d'oracle.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    En effet les VARRAYS et NESTED TABLES sont des types SQL utilisables à la fois dans des tables, des requêtes SQL ou en tant que variable PLSQL, alors que les "INDEX-BY TABLES" ou "Associative arrays" sont des types purement PLSQL, donc uniquement utilisables dans des variables PLSQL. Ceci explique pourquoi on ne peut créer ces derniers qu'en PLSQL et pourquoi on ne peut pas les utiliser dans des requêtes SQL ou des tables.

    Dans le même genre d'idée les types RECORD sont purement PLSQL tandis que les types OBJECT sont des types SQL.

    Comme plaineR le souligne, vous devez avoir eu une erreur de compilation du type lorsque vous avez essayé CREATE TYPE... INDEX BY...

    Cordialement,

    rbaraer

Discussions similaires

  1. Creation de type Objets pour projet en JDBC
    Par Nelmech dans le forum Schéma
    Réponses: 2
    Dernier message: 08/04/2013, 17h06
  2. Creation de type en PHP
    Par Jolt0x dans le forum Langage
    Réponses: 1
    Dernier message: 18/08/2010, 15h24
  3. creation de "TYPE OBJECT" avec des methodes
    Par TheBlackReverand dans le forum Oracle
    Réponses: 2
    Dernier message: 15/06/2009, 20h57
  4. Réponses: 2
    Dernier message: 08/09/2008, 09h28
  5. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59

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