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 :

Contrôle nom fichier avant chargement dans table SQL


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Contrôle nom fichier avant chargement dans table SQL
    Bonjour à tous,

    Je souhaiterais chargé un fichier dans une table SQL.

    Voici le type de nom du fichier à charger :
    ABC_DEF_JKL_MNOPQRS_20221031173750.dat
    Ce nom de fichier est composé de caractères alphanumérique (nom du fichier : ABC_DEF_JKL_MNOPQRS) et suffixé par une date (20221031173750) au format AAAAMMJJHHMMSS

    Au préalable, je souhaiterais faire quelques contrôles et actions avant de charger ce fichier en table (je précise que toutes ces contrôles et actions ne portent uniquement que sur le nom du fichier et non sur le contenu du fichier en lui-même, excepté le fait de vérifier que le contenu du fichier n'est pas vide) :

    - prendre les 19 premiers caractères du fichier afin de vérifier que le nom du fichier soit bien le bon (dans notre exemple : 19 premiers caractères = ABC_DEF_JKL_MNOPQRS)

    -prendre la position 21 à 28, dans notre exemple 20221031 afin de vérifier que c'est bien une date (AAAAMMJJ)

    -vérifier que cette date est cohérente (par exemple année en cours +1 ou autres contrôles...)

    - vérifier que le fichier à charger n'est pas vide

    Ma question : comment écrire cela, faut-il passer par du PLSQL (je ne connais pas la syntaxe de ce langage).
    J'imagine que ce genre de contrôle a déjà été écrit, auriez-vous des exemples ?

    D'avance, merci pour votre aide !
    Happy Halloween à toutes et à tous.
    Elfy

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Les fonctions que tu utiliseras en PL/SQL seront probablement les mêmes que celles que tu utiliseras directement dans la requête SQL. Tout dépend de comment est implémenter ce contrôle.

    en requête SQL, tu peux faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select case when regexp_count(file_name, '^[[:alpha:]_]{19}')) != 1 --> contrôle que les 19 premiers caractères sont alpha ou _
                        or validate_conversion(substr(file_name, 21, 8) as date, 'yyyymmdd') != 1 --> vérifie si les 8 caractères à partir du caractère 21 représentent bien ou date
                        or substr(file_name, 21, 4) .... --> contrôle sur l'année
                   then 'KO'
                   else 'OK'
    from...
    Pour vérifier si le fichier n'est pas vide, tu peux utiliser une table externe qui pointe directement dessus.

  3. #3
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour votre retour...

    J'ai bien compris pour vérifier si le nom contient bien des caractères alphanumériques, par contre comment tester si le fichier en entrée porte bien le nom approprié (autrement dit vérifier que le nom du fichier est le bon)

    Voici la structure du code qui sera utiliser, puis-je intégrer le code SQL fourni ou bien dois-je passer par du PL/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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    DROP FUNCTION "informix".p_load;
     
    CREATE PROCEDURE "informix".p_load_()
       RETURNING VARCHAR(13);
     
       DEFINE l_error   SMALLINT;
       ...
       ...
       ...
    --
       DEFINE i   INTEGER;
       DEFINE l_date_debut   DATETIME YEAR TO SECOND;
    --
    -- --------------------------------------------------------------------
       ON EXCEPTION SET l_error...
         BEGIN
            INSERT INTO log_batch
    		...
            FROM    master
            RETURN "CODE ERREUR="||v_statut;
         END
       END EXCEPTION;
    -- --------------------------------------------------------------------
       LET v_statut = 0;
    ...
     
    --
    -----------------------------------------------------------------------
    --CONTROLE FICHIER
    -----------------------------------------------------------------------
    à insérer ici ?
     
    [select case when regexp_count(file_name, '^[[:alpha:]_]{19}')) != 1 --> contrôle que les 19 premiers caractères sont alpha ou _
                        or validate_conversion(substr(file_name, 21, 8) as date, 'yyyymmdd') != 1 --> vérifie si les 8 caractères à partir du caractère 21 représentent bien ou date
                        or substr(file_name, 21, 4) .... --> contrôle sur l'année
                   then 'KO'
                   else 'OK'
    from...]
     
    -- --------------------------------------------------------------------
    -- RECUP DATE 
    -- --------------------------------------------------------------------
       LET l_step = 'STEP_0A';
       select * from ...;
       select min(date_crea)...
    --
       IF v_date_ref IS NULL
       THEN
          LET v_statut = 1;
          LET l_error = 404;
     ...
    	  LET v_date_ref = TODAY;
          RAISE EXCEPTION v_statut;
       END IF;
     
     
    -- --------------------------------------------------------------------
    -- CHARGEMENT
    -- --------------------------------------------------------------------
       LET l_step = 'STEP_0B';
       LET retour = p_insert();
     
    	IF retour = '0'
    	THEN 
    		RETURN 0;
    	ELSE 
    		RETURN 1;
    	END IF;
     
    --
    END PROCEDURE;                                                                                                                   
    COMMIT;
    D'avance, merci !
    Elfy

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    C'est de l'informix ça, pas du pl/sql. Pas sûr donc que les fonctions REGEXP soient connues. Je ne connais pas ce langage donc je ne pourrai pas t'aider. Désolé.

  5. #5
    Candidat au Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je comprends, pas de souci...Merci beaucoup de m'avoir répondu et merci beaucoup pour ton aide.
    Très bonne soirée

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

Discussions similaires

  1. Import de fichiers plats dans table SQL 2008 R2
    Par Nicos42 dans le forum Développement
    Réponses: 11
    Dernier message: 09/12/2014, 08h10
  2. [Toutes versions] Boite de dialogue OuvrirFichier et Intégration nom fichiers et chemin dans champ table
    Par Aladin_23 dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/10/2014, 11h41
  3. Importation fichier txt dans table SQL server
    Par vito30620 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/09/2013, 07h41
  4. Réponses: 3
    Dernier message: 20/09/2006, 11h05
  5. Insertion dans table SQL server (Trigger) Aidz moi SVP????
    Par pop bob dans le forum Développement
    Réponses: 2
    Dernier message: 30/07/2005, 23h55

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