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 :

Verifier des donnée INSERT PL/SQL


Sujet :

Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut Verifier des donnée INSERT PL/SQL
    Bonjour,

    Je suis novice en PL/SQL et j'ai besoin d'aide pour un projet (université).
    Je dois vérifier des données quand je les insère mais je ne sais pas du tout comment m'y prendre. Voici un exemple de ce que j'insère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO Customer
    VALUES (seq_customerid.NEXTVAL, 'DK', 'Smith', 'Harry', '705 King St, Buderim', 4556, 'QLD', 5423456221385962, '0754591245', '17-JAN-08');
     
    INSERT INTO Customer
    VALUES (seq_customerid.NEXTVAL, 'DK', 'Dixon', 'James', '5 Avondale Road, Geelong', 2016, 'VIC', 5362985645253285, '0758645228', '2-FEB-08');
     
    INSERT INTO Customer
    VALUES (seq_customerid.NEXTVAL, 'DK', 'Anderson', 'Anne', '14 Rosalie St, Paddington', 2045, 'QLD', 5136252320478944, '0295612311', '22-AUG-08');
    Je dois vérifier avec un block PL/SQL :

    Customer’s MemberDate: must be before or equal to the current date
    Customer’s CreditCard: must be less or equal to 16 digits
    Customer’s postcode: must be equal to 4 digits

    Voici la structure de la table customer:

    CustomerID, CustomerType, LastName, FirstName, Address, Postcode, Cust_State, CreditCard, Phone, MemberDate

    Si quelqu'un peu m'aider j'en serais très reconnaissant !

    Merci.

  2. #2
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    bonjour;
    peuvez vous nous donner la structure de table en question?

  3. #3
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    d'apres
    INSERT INTO Customer
    VALUES (seq_customerid.NEXTVAL, 'DK', 'Smith', 'Harry', '705 King St, Buderim', 4556, 'QLD', 5423456221385962, '0754591245', '17-JAN-08');
    MemberDate est une date.
    CreditCard est de type number
    postcode est de type number

    avant de faire des "insert" tu verifies comme suite:

    pour MemberDate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MemberDate_var='17-JAN-08';
     
    if MemberDate_var<=sysdate then ....

    pour CreditCard et postcode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    valeur_num=4556;
     if  standard.lengthb(to_char(val_num)) =4then 
      .......
      end if;

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Merci Boossafi pour ton aide.

    Je dois créer en premier la table (je ne dois pas modifier la table) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Create table Customer
    (CustomerID  NUMBER(4) PRIMARY KEY,
    CustomerType VARCHAR2(25) NOT NULL,
    LastName VARCHAR2(25) NOT NULL,
    FirstName VARCHAR2(15) NOT NULL,
    Address VARCHAR2(35),
    Postcode NUMBER(4),
    Cust_State VARCHAR2(3) CHECK(Cust_State IN ('QLD', 'ACT', 'NSW', 'WA', 'SA', 'TAS', 'NT', 'VIC')),
    CreditCard NUMBER(16) NOT NULL,
    Phone VARCHAR(10) NOT NULL CHECK(REGEXP_LIKE(Phone, '^0[[:digit:]]{9}$')),
    MemberDate DATE NOT NULL
    );
    Et après ce que tu me proposes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN
    	MemberDate_var='17-JAN-08';
    	IF MemberDate_var<=sysdate then ....
    END;
    Dois-je en premier insérer tous mes enregistrements et vérifier s'ils sont bons ?
    Car j'ai besoin de l'enregistrement pour récupérer la variable MemberDate ou est-ce que je peux vérifier en même temps que l'INSERT ?

  5. #5
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    il faut cheké avant chaque insert comme suite

    (Il y a mille et une facon de faire)
    voici un exemple pour tester et apprendre:

    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 procedure insertion as
    var_MemberDate  date;
    var_Postcode      number;
    var_CreditCard     number;
     
    begin
    var_MemberDate  :='17-JAN-08';
    var_Postcode      :=4556;
    var_CreditCard    :=5362956455253285;
     
    IF var_MemberDate<=sysdate then 
     if    standard.lengthb(to_char(var_Postcode)) =4 then  
      if    standard.lengthb(to_char(var_CreditCard)) =16 then 
    INSERT INTO Customer
    VALUES (seq_customerid.NEXTVAL, 'DK', 'Anderson', 'Anne', '14 Rosalie St, Paddington', 2045, 'QLD', 5136252320478944, '0295612311', '22-AUG-08');
    commit;
     
      else dbms_output.put_line('erreur de 16') ;
    end if;
    else dbms_output.put_line('erreur de 4');
    end if;
    else dbms_output.put_line('erreur de date') ;
    end if;
     
     
     
     
     
    end;

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Merci encore pour ta réponse.

    J'ai essayé ta proposition mais je me suis rendue compte que passé par des Trigger serait plus facile. Peut tu me dire si c'est la bonne solution. Je veux que que les informations soit checké et pas modifié.

    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
    -- Customer’s MemberDate: must be before or equal to the current date
     
    CREATE OR REPLACE TRIGGER customer_date
    BEFORE INSERT OF MemberDate ON Customer
    FOR EACH ROW
    WHEN (new.MemberDate < SYSDATE)
    	BEGIN
    		DBMS_OUTPUT.PUT_LINE('The date is wrong for the customer:' new.CustomerID);
    	END;
    /
     
    -- Customer’s CreditCard: must be less or equal to 16 digits
    CREATE OR REPLACE TRIGGER customer_credit_card
    BEFORE INSERT OF CreditCard ON Customer
    FOR EACH ROW
    WHEN (standard.lengthb(to_char(new.CreditCard)) =16)
    	BEGIN
    		DBMS_OUTPUT.PUT_LINE('The credit card number is wrong for the customer:' new.CustomerID);
    	END;
    /
     
    -- Customer’s postcode: must be equal to 4 digits
    CREATE OR REPLACE TRIGGER customer_postcode
    BEFORE INSERT OF Postcode ON Customer
    FOR EACH ROW
    WHEN (standard.lengthb(to_char(new.Postcode)) != 4)
    	BEGIN
    		DBMS_OUTPUT.PUT_LINE('The post code number is wrong for the customer:' new.CustomerID);
    	END;
    /
     
    -- Movie’s PurchaseDate: must be before or equal to the current date
    CREATE OR REPLACE TRIGGER movie_purchase_date
    BEFORE INSERT OF PurchaseDate ON Movie
    FOR EACH ROW
    WHEN (new.PurchaseDate > SYSDATE)
    	BEGIN
    		DBMS_OUTPUT.PUT_LINE('The purchase date is wrong for the movie:' new.ID);
    	END;
    /

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 34
    Par défaut
    Quqnd j essaye le code ca me renvoie un message d'erreur. Quelqu un pourrait m'expliquer l'erreur svp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Error starting at line 2 in command:
    CREATE OR REPLACE TRIGGER movie_purchase_date
    BEFORE INSERT OF PurchaseDate ON Movie
    FOR EACH ROW
    WHEN (new.PurchaseDate < SYSDATE)
    	BEGIN
    		DBMS_OUTPUT.PUT_LINE('The purchase date is wrong for the movie:' new.ID);
    	END;
    Error report:
    ORA-04073: column list not valid for this trigger type
    04073. 00000 -  "column list not valid for this trigger type"
    *Cause:    A column list was specified for a non-update trigger type.
    *Action:   Remove the column list.

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

Discussions similaires

  1. Stockage des données sur server Sql 2005 a travers classeur excel.
    Par lele79 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/11/2010, 12h48
  2. Pb importation des données dans MS SQL Enterprise Manager !
    Par MeHo_ dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/07/2008, 11h15
  3. Gestion des données avec MS sql server 2005
    Par rezgui_fawzi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/01/2008, 15h55
  4. [Access] Affichage spécial des données résultantes en sql
    Par alexandrebergercyr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/05/2007, 22h29
  5. Rafraichissement des données avec ADOConnection -SQL Server
    Par newfsch dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/01/2006, 21h48

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