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

PL/SQL Oracle Discussion :

Create table dans package


Sujet :

PL/SQL Oracle

  1. #1
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut Create table dans package
    Bonjour,

    J'ai essayé de mettre un create table dans un package body mais j'ai une erreur de compil.

    j'ai essayé a la "mode SQL serveur"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -- création de la table d'import
    	commande:='create table IMPORT_TMP (ID_PANO INTEGER,X FLOAT,Y FLOAT,altitude float,yaw float,pitch float,roll float,date_data varchar2(50),sky_cover float) ';
    	commande:= commande || ' ORGANIZATION EXTERNAL ( TYPE oracle_loader  DEFAULT DIRECTORY MYREP ACCESS PARAMETERS (';
    	commande:= commande || ' RECORDS DELIMITED BY NEWLINE';
    	commande:= commande || ' SKIP 1';
    	commande:= commande || ' FIELDS TERMINATED BY ''\t''';
    	commande:= commande || ' MISSING FIELD VALUES ARE NULL ) LOCATION (' || :nom || ')  )	REJECT LIMIT 0	NOMONITORING;';
     
    	EXECUTE commande;
    sans succès.
    quelqu'un aurait-il une astuce a me proposer?

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE commande;

  3. #3
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    merci de ta réponse Mcm, je n'ai plus l'erreur si je fais un select dans la commande. En revanche j'ai le message d'erreur suivant lorsque la commande concerne un create table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    begin
    *
    ERREUR à la ligne 1 :
    ORA-01031: privilèges insuffisants
    ORA-06512: à "CASSINI.IMPORT_LIVRAISON", ligne 21
    ORA-06512: à ligne 2
    comment mettre un grant sur un package.
    Je précise que je l'ai créé sous un compte SYSDBA du schéma

  4. #4
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    Bonjour,

    J'ai essayé de mettre un create table dans un package body mais j'ai une erreur de compil.

    j'ai essayé a la "mode SQL serveur"
    ...
    Ne le faites pas avec Oracle c'est une mauvaise solution !
    Utilisez à la limite une table temporaire créée à l'installation !
    Mais, il est plus probable c'est que vous n'ayez pas besoin de cette table.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    je dois créer des centaines de tables avec des fichiers texte venant d'un fournisseur.
    il s'avère que ce fournisseur mets des valeurs incohérentes pour le moment dans ses fichiers; exemples:
    'NaN' dans un champ integer
    'erreur' dans un champ date
    et j'en passe...
    donc je créé des tables temporaires avec ces fichiers, je teste la cohérence des données et je loggue les erreurs.
    Dans le cas où il n'y a pas d'erreur, je fais ensuite un create table table_finale as select * from table temporaire puis je droppe la table temporaire
    je ne vois pas de solutions plus simple !!

    si vous en connaissez une, je suis preneur

  6. #6
    Invité
    Invité(e)
    Par défaut
    Pourquoi ne garde pas une table "fixe" que tu "truncate" au besoin au lieu de la créer/supprimer régulièrement ?

  7. #7
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    je dois créer des centaines de tables avec des fichiers texte venant d'un fournisseur.
    il s'avère que ce fournisseur mets des valeurs incohérentes pour le moment dans ses fichiers; exemples:
    'NaN' dans un champ integer
    'erreur' dans un champ date
    et j'en passe...
    donc je créé des tables temporaires avec ces fichiers, je teste la cohérence des données et je loggue les erreurs.
    ...
    Avec Oracle vous avez des tables externes pour ça.

    Citation Envoyé par serge0934 Voir le message
    ...
    Dans le cas où il n'y a pas d'erreur, je fais ensuite un create table table_finale as select * from table temporaire puis je droppe la table temporaire
    je ne vois pas de solutions plus simple !!

    si vous en connaissez une, je suis preneur
    Faut il comprendre que derriere chaque fichier correct vous avez une autre table dans votre application ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    Je vais vous donner un exemple concret:
    j'ai un fichier concernant une localité avec des infos : 3 champs integer, 2 date, 1 varchar
    j'ai un autre fichier concernant une autre localité avec les mêmes infos : 3 champs integer, 2 date, 1 varchar
    donc je charge chaque fichier dans une table temporaire, je fais mes vérif, et si c'est ok, je créé une table "permanente" avec un create table as select =>
    j'ai donc une table permanente pour chaque fichier correct.
    ensuite je rajoute des champs sur ces tables pour mettre certaines infos a nous (ex: type fournisseur,dateréception, localité) et puis j'insère toutes les lignes de ces tables "permanentes" dans une table globale France_xx. Enfin je suprime les tables qui ne servent plus, tout en logguant que les fichiers ont été intégrés.
    en résumé, je créé comme tables:

    - VILLE_FOURNISSEUR_NUMVERSION_TMP
    - VILLE_FOURNISSEUR_NUMVERSION

    où VILLE peut avoir 141 noms différents, FOURNISSEUR 5, et pour NUMVERSION, certains sont déjà a 15.
    si je fais un script pour chaque cas j'aurai 141 * 5 * 10 = 7050 scripts au mini

    j'espère avoir été assez clair

    mnitu: je vais regarder ce que sont les tables externes.
    merci a vous
    A+
    serge

  9. #9
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    petite précision, j'avais pas pensé que ces tables s'appelaient des tables externes. En fait ma table temporaire est une table externe.
    sur SQL serveur il n'y a pas de différences avec SSIS

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    ta directory est bien créée et tu as les droits en lecture/écriture ?

    il te manque des cotes ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOCATION (' || :nom || ')
    essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOCATION (''' || :nom || ''')

  11. #11
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    tu as raison Alx13, il faut les double cote mais je m'en étais rendu compte après avoir posté. J'ai toujours l'erreur
    J'ai les droits d'écriture/lecture sur la directory puisque c'est moi qui la crée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE DIRECTORY MYREP AS 'C:\TOTO'
    j'avais même fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRANT READ ON DIRECTORY MYREP TO MOI
    GRANT WRITE ON DIRECTORY MYREP TO MOI

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Le répertoire "C:\TOTO" est bien sur le serveur Oracle ?

  13. #13
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    Le répertoire "C:\TOTO" est bien sur le serveur Oracle ?
    oui.

    je pense que ce qu'il me manque c'est un grant quelque part...

  14. #14
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    oui.

    je pense que ce qu'il me manque c'est un grant quelque part...
    Vérifiez qu'Oracle a le droit de lire ce répertoire dpdv du système d'exploitation! Vérifiez la case du directory dans la définition et dans la référence de la table externe.

  15. #15
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    j'ai tous les droits...
    si j'excécute le script directement sous SQLPLUS, il fonctionne parfaitement

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Vous vous connectez bien avec le même utilisateur (CASSINI) ?

  17. #17
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

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

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    oui

  18. #18
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Pourrions-nous voir tout le code de la procédure?

Discussions similaires

  1. Create table dans une loop PL/SQL
    Par neo.51 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 04/03/2009, 10h59
  2. Create table dans une fonction SQL
    Par mimi0501 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2008, 13h25
  3. [PL/SQL] Create table dans un trigger
    Par CrazyLiam dans le forum PL/SQL
    Réponses: 9
    Dernier message: 11/12/2007, 13h49
  4. Create table dans le mauvais schema
    Par Daark dans le forum Administration
    Réponses: 3
    Dernier message: 19/12/2006, 14h11
  5. [8i] Parrallel_clause dans CREATE TABLE
    Par ducho dans le forum Oracle
    Réponses: 2
    Dernier message: 14/02/2006, 16h27

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