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 :

Paramétrage de tables externes


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut Paramétrage de tables externes
    Excusez moi, j'espère que c'est + lisible comme ça.

    La version d'Oracle est 10g

    Bonjour à tous,


    Je cherche à paramétrer simplement la création de tables externes (mettre en paramètres les fichiers de log, bad et "source" de la table externe).

    Je pensais y arriver simplement, mais ça ne fonctionne pas.

    J'ai un .bat qui lance un script sql qui se connecte à la base de données et lance le script proprement dit de création de tables externes.

    Ca donne ça :

    le .bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    "sqlplus" /NOLOG @"%1SCRIPT\LanceETScript.sql" %OraUser% %UserPwd% %ORACLE_SID% "%1SCRIPT\ET%2.sql" "%2.bad" "%2.log" "%3"
    LanceETScript.sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    set echo off
    set head off
    set feed off
    set pause off
    set pagesize 0
     
    connect &1/&2@&3
    	@&4 &5 &6 &7
    .
    run;
    exit

    Et le script de création de table externe en lui même :

    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
     
     
    CREATE OR REPLACE DIRECTORY inDir AS 'C:\IDidItMyWay\In';
    CREATE OR REPLACE DIRECTORY outDir AS 'C:\IDidItMyWay\Out';
    DROP TABLE GEtoto;
    CREATE TABLE GEtoto
    (
    	typenr		VARCHAR2(2),
    	fill1		VARCHAR2(50),
    	fill2		VARCHAR2(126),
    	fill3		VARCHAR2(8),
    	fill4		VARCHAR2(3),
    	MOISTRAI	NUMBER(6),
    	NBENREG		NUMBER(8)
    )
    ORGANIZATION EXTERNAL
    (
    	TYPE ORACLE_LOADER
    	DEFAULT DIRECTORY inDir
    	ACCESS PARAMETERS(records delimited by newline
    		badfile	outDir:'&5'
    		logfile outDir:'&6'
    		fields terminated by ';'
    		missing field values are null
    		(typenr,fill1,fill2,fill3,fill4,MOISTRAI,NBENREG))
    	LOCATION ('&1')
    )
    PARALLEL
    REJECT LIMIT UNLIMITED ;
    ================================

    Voila !

    On dirait que le script finale s'exécute 2 fois et plante à la 2nde fois.

    Y a-t-il moyen de faire + simple (tout en sachant qu'il y a beaucoup de paramètres, la procèdure de création de la table externe doit être paramètrable).

    Ai-je été clair ? (je crains que non, mais n'hésitez pas à poser des questions).

    Surtout si on peut faire + simple ...

    Merci d'avance.

    Cordialement.

  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
    merci d'éditer ton message pour ajouter les balises

    j'oubliais : http://www.developpez.net/forums/showthread.php?t=30569

  3. #3
    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
    il y a un problème dans le numéro des variables... je te conseille de les afficher pour comprendre ton erreur

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut
    la substitution des paramètres semble bien se passer, dans la fenêtre dos les paramètres sont bons.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut
    Y a personne qui a une idée ?
    Si je lance le script sql (de création de la table externe) dans sql+ ça marche, si je le lance par .bat ça ne fonctionne pas.

    En fait ça semble ne pas fonctionner (la table est malgré tout bien remplie), les fichiers log et bad sont remplis. Les formats des colonnes dans le .log ne correspondent pas à ceux décrits dans la structure de la table (par ex. typenr varchar2(2) ===> CHAR (255) Terminé par ";").

    Pas de pb de délimitation de records par newline ?

    A la fin du .bat, affiché dans la fenêtre dos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE TOTO
                 *
    ERREUR Ó la ligne 1 :
    ORA-00955: ce nom d'objet existe dÚjÓ
    Alors que juste avant il y a un drop table.


    C'est bizarre, bizarre.

    Personne n'a une piste ?

    Cordialement.

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Si vous ne l'avez pas déjà fait, rajoutez dans vos scripts SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    spool <fichier log>
    set echo on
    Cela vous affichera dans <fichier log>, chaque commande exécutée avec son résultat.

    Si vous voulez vous arrêtez à la première erreur, vous pouvez aussi rajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    whenever sqlerror exit failure;

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Pourquoi ne pas créer la table dans un bloc pl/sql via l'instruction execute immediate ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut
    je suivrai vos conseils demain matin, je vous tiens au courant.
    Merci de votre aide.
    A+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut
    Bon ça a l'air de mieux marcher et je ne sais pas trop pourquoi...
    Dans les scripts sql qui au final créent la table externe j'ai rajouté au début :

    set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on

    Dans le script qui créé la table externe dans LOCATION j'ai rajouté la directory genre : LOCATION(inDir, '&1').

    Mais bon, sans ça à l'air de marcher aussi bien ...

    Ah oui j'ai aussi enlever des pause dans les .bat.

    Un dernier petit pb me chiffonne, dans le fichier csv j'ai des zones NUMBER(12,2) avec un point décimal (au lieu d'une virgule ?, j'ai l'impression que j'ai une version "française" d'oracle puisque tous les messages d'erreur et d'avertissement sortent en français), il me semble qu'à cause de cela j'ai mon badfile (et logfile) qui se remplit (message d'erreur : erreur lors du traitement de la colonne MONTANT, la ligne 2, pour le fichier de données F:\RECEPT\COCCV.csv ORA-01722: Nombre non valide), je crois qu'il faut que je précise cette option dans le fichier de control, mais je ne trouve pas...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Points : 74
    Points
    74
    Par défaut
    Le pb venait peut-être du fait que je lançais 2 scripts sql dans le même .bat (1 pour la création de table externe, et 1 2nd qui lance une proc stock). Le fait de supprimer le lancement du 2nd dans le .bat fait fonctionner la création de la table externe.

    Donc comment faire pour lancer 2 scripts dans un même .bat ? Je m'y prend ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     
    sqlplus -s /NOLOG @"%1SCRIPT\LanceETScript.sql" %OraUser% %UserPwd% %ORACLE_SID% "%1SCRIPT\ET%2.sql" "%2.bad" "%2.log" "%3"
    sqlplus -s /NOLOG @"%1SCRIPT\SpoolBatchImport.sql" %OraUser% %UserPwd% %ORACLE_SID% "%3" "%3.log">nul

    Evidemment ça ne fonctionne pas, comment faire ?

    Cordialement.

Discussions similaires

  1. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  2. Import massif/table externe et real
    Par Eric Sibert dans le forum Firebird
    Réponses: 7
    Dernier message: 30/08/2005, 10h13
  3. [MCD]Modeliser Table externe à la base de données
    Par bossun dans le forum Schéma
    Réponses: 4
    Dernier message: 27/06/2005, 15h43
  4. [ORACLE 9i] Tables externes
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 22/12/2004, 15h24
  5. [ORACLE 9i] tables externes et Skip column
    Par sygale dans le forum SQL
    Réponses: 7
    Dernier message: 17/11/2004, 05h13

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