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 :

Insert into avec n+1 sans séquence


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut Insert into avec n+1 sans séquence
    Bonjour à tous,

    Je suis sous Oracle 10g, je bosse actuellement sur une base de données sur laquelle je dois faire des insert sur 2 tables en même temps. Mon problème n'est pas de faire 2 insert dans deux tables, mais la compréhension de la structure d'une table dans laquelle je dois insérer (table codebarre).

    Dans codebarre j'ai une colonne prefix qui nullable = No. Je n'ai aucune séquence stockée en base de données pour cette colonne mais celle ci contient des données déjà insérées par d'autres personnes. Le prefix semble s'auto incrémenter de +1 à chaque insertion en fonction du secteur.

    codebarre :
    ID NUMBER(10,0) No
    SECTOR CHAR(1 BYTE) No
    YEAR NUMBER(2,0) No
    PREFIX NUMBER(5,0) No

    codebarre :
    id Sector YEAR Prefix
    1 L 10 1
    2 L 10 2
    3 L 10 3
    4 L 10 4
    5 L 10 5
    36699 F 11 1
    36905 F 11 2
    36906 F 11 3
    36909 F 11 4

    Je me demande si il y aurait un moyen d'insérer dans codebarre un prefix tel que : sector like 'F' and YEAR = 11 and PREFIX = precedent prefix+1 dans un insert into ?

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    un sujet similaire abordé ici

    Bon courage

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Vous n'avez pas tout simplement un trigger sur votre table ?

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    salut,

    Merci pour vos réponses. J'ai effectivement un trigger pour cette table, mais je n'ai pas l'impression qu'il gère la colonne PREFIX.

    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
    create or replace TRIGGER "TBB".TOB_CODEBARRE
    	BEFORE INSERT OR UPDATE ON CODEBARRE
    	FOR EACH ROW
    DECLARE 
    	integrity_error  exception;
    	errno            integer;
    	errmsg           char(200);
    BEGIN
    	-- autoincrement
    	IF INSERTING THEN
    		BEGIN
    			SELECT S_CODEBARRE.NEXTVAL INTO :NEW.ID FROM dual;
    		EXCEPTION
    			WHEN integrity_error THEN 
    				raise_application_error(errno, errmsg);
    		END;
    	END IF;
     
      BEGIN
    	-- calculated row CODEBARRE of RESSOURCE table
    	UPDATE RESSOURCE SET CODEBARRE = 	:NEW.SECTOR || TO_CHAR(:NEW.YEAR,'FM00') || TO_CHAR(:NEW.PREFIX,'FM00000') ||
    			    					DECODE(:NEW.CATEGORY, 2, 'E', 3, 'D', NULL,'','') || TO_CHAR(:NEW.SUFFIX,'FM00') 
    		WHERE CODEBARRE_ID = :NEW.ID ;
      EXCEPTION
        WHEN OTHERS THEN NULL;
      END;
     
    END;
    C'est pour cela que je demande si il est possible de faire des insert into avec conditions. Je suis un peu perdu.

    Any idea ?

    Merci.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    On peut faire ce qu'on veut, vous avez de gros éléments de réponse dans le lien posté par Yanika_bzh.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    Merci Waldar pour ta réponse. Je vais me pencher un peu plus sur le lien de Yanika_bzh.

    Par contre, le trigger ne gère pas la colonne PREFIX, c'est bien ça?

    A+

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Tout à fait, le trigger sert à deux choses :
    1. En cas d'insertion, il utilise la séquence S_CODEBARRE pour générer un nouvel ID pour la table CODEBARRE.
    2. Dans tous les cas, il met à jour la colonne CODEBARRE de la table RESSOURCE en concaténant les éléments de la formule.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    En tout cas il faudrait enlever ce EXCEPTION WHEN OTHERS THEN NULL qui veut dire "quelque soit le problème, je ne veux pas que l'appelant soit au courant" et qui est à peu près la pire chose qu'on puisse faire dans un gestionnaire d'erreurs.

    Apparemment Oracle 11g a même introduit un warning spécialement contre cet usage.

  9. #9
    Expert confirmé 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
    Par défaut
    On peut facilement renoncer aussi au code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EXCEPTION
    			WHEN integrity_error THEN 
    				raise_application_error(errno, errmsg);
    vu qu'il ne sert à rien.

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 137
    Par défaut
    Salut à tous,

    Merci beaucoup pour votre aide . J'y vois plus clair maintenant.

    A+

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

Discussions similaires

  1. insert into avec une date
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/11/2006, 22h08
  2. [Débutant] INSERT INTO avec VALUES + SELECT
    Par Feezdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/06/2006, 10h10
  3. INSERT INTO avec date (asp/access)
    Par ddeee dans le forum ASP
    Réponses: 2
    Dernier message: 30/03/2006, 13h07
  4. [MySQL] Php et INSERT INTO, avec variables
    Par Djwaves dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 20/02/2006, 13h53
  5. INSERT INTO avec une valeur numéroauto
    Par priest69 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/11/2005, 15h39

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