Quantcast
Mercredi 20 juillet 2011 3 20 /07 /Juil /2011 21:38

 

Insérer des lignes dans table avec commande SQL INSERT INTO.

Comment insérer des enregistrements dans une table Oracle.
Comment ajouter des lignes dans une table Oracle.

L'instruction DML INSERT INTO TABLE est utilisée pour ajouter des lignes à une ou plusieurs tables.
Les lignes peuvent être ajoutées avec des valeurs de données spécifiques, ou alors elles peuvent être créés à partir d'une sous-requête.

Pour pouvoir insérer des enregistrements dans une table, il faut que cette dernière soit dans votre schéma sauf si vous avez reçu le privilège INSERT sur la table.
Si vous avez le privilège INSERT ANY TABLE, vous pouvez ajouter des données dans toutes les tables de tout schéma.

Syntaxe INSERT INTO TABLE mono-ligne.

 
INSERT INTO [ schéma ]. table  [ (column1 [, column2 ]...) ]
     VALUES ({ expr1 | DEFAULT } [, { expr2 | DEFAULT } ]...)

sql-insert-into-table

Création environnement test insert into (tables et séquence Oracle)

 
C:\>SET ORACLE_SID=DBTEST

C:\>SQLPLUS scott/tiger

SQL*Plus: Release 10.2.0.1.0 - Production on Jeu. Juil. 21 14:09:34 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connecté à :
Oracle Database 10g Release 10.2.0.1.0 - Production

SQL> CREATE TABLE SCOTT.JOUEUR
     (
       ID_JOUEUR  NUMBER(5)                          NOT NULL,
       J_NOM      VARCHAR2(10),
       J_DT_NAIS  DATE,
       J_NIVEAU   NUMBER(1)                          DEFAULT 0
     );

Table créée.

SQL> CREATE SEQUENCE SCOTT.SEQ_ID_JOUEUR
     START WITH 1
     INCREMENT BY 1
     MINVALUE 1
     MAXVALUE 20000
     NOCACHE
     NOCYCLE
     NOORDER;

Séquence créée.

SQL> CREATE TABLE SCOTT.NIVEAU
    (
      NB_JOUEUR  NUMBER(5)                          NOT NULL,
      N_NIVEAU   NUMBER(1)                          DEFAULT 0
    );

Table créée.

 

 

INSERT INTO TABLE avec numéro de SEQUENCE Oracle.

Important :
- le nombre de champs déclaré dans l'instruction INSERT INTO doit être égale au nombre de champs déclaré dans VALUES.
- si tous les champs de la table sont déclarés dans VALUES alors il n'est pas obligatoire de déclarer les colonnes.
- Respectez les CONTRAINTES (Unicité, Not NULL, Check,...) définies sur la table sous peine d'échec avec l'instruction INSERT INTO.

 
SQL> INSERT INTO scott.joueur (id_joueur, j_nom, j_dt_nais, j_niveau)
          VALUES (scott.seq_id_joueur.nextval,'Pierre','01/05/1972',4);

1 ligne créée.

SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         1 Pierre     01/05/1972          4

Pour insérer l'ID du joueur, nous avons créé précédemment une séquence oracle SEQ_ID_JOUEUR (équivalent à une auto-incrémentation. Voir lien en fin d'article).
L'obtention d'un ID se fait avec la commande NEXTVAL, ce qui nous donne SEQ_ID_JOUEUR.NEXTVAL pour la colonne id_joueur.

 

SQL INSERT INTO en déclarant quelques colonnes seulement.

 
SQL> INSERT INTO scott.joueur (id_joueur, j_nom, j_dt_nais)
          VALUES (scott.seq_id_joueur.nextval,'Jean','20/08/1975');

1 ligne créée.

SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         2 Jean       20/08/1975          0

Ici nous avons omis volontairement la colonne J_NIVEAU dans l'instruction INSERT INTO, car celle ci a une valeur par défaut. La valeur par défaut du champ est automatiquement insérée si celui ci n’apparaît pas dans l'instruction INSERT INTO.
Si des champs acceptant la valeur NULL sont omis alors une valeur NULL leur sont affectée.
Si des champs n'acceptant pas de valeur NULL sont omis et n'ont pas de valeur par défaut attribuée alors l'instruction sql INSERT INTO échoue.

 

SQL INSERT INTO avec des fonctions Oracle et Opérateurs.

 
SQL> INSERT INTO scott.joueur
      VALUES (scott.seq_id_joueur.nextval,INITCAP('stephane'),to_date('15/03/1972','dd/mm/yyyy'),2+1);

1 ligne créée.

SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         3 Stephane   15/03/1972          3

Nous pouvons intégrer des fonctions et opérateurs dans les instructions sql INSERT INTO.
Ici la fonction INITCAP qui permet de convertir le premier caractère de chaque mot en une Majuscule.
La fonction TO_DATE qui permet de formater vos dates par rapport à vos NLS_LANG.
Une opération avec l'opérateur +.
Notez qu'ici nous n'avons déclaré aucun champ de destination car nous mettons à jour toutes les colonnes dans VALUES.

 

SQL INSERT INTO avec le mot clef DEFAULT.

 
SQL> INSERT INTO scott.joueur
          VALUES (scott.seq_id_joueur.nextval,'Daniel','10/05/1972',DEFAULT);

1 ligne créée.

SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         4 Daniel     10/05/1972          0

Le mot clef DEFAULT permet de mettre la valeur par défaut pour ce champ, ici DEFAULT = 0.

 

SQL INSERT INTO avec des valeurs NULL.

 
SQL> INSERT INTO scott.joueur
          VALUES (scott.seq_id_joueur.nextval,'Sandrine',NULL,2);

  OU

SQL> INSERT INTO scott.joueur
          VALUES (scott.seq_id_joueur.nextval,'Sandrine','',2);

1 ligne créée.


SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         5 Sandrine                       2

Le mot clef NULL ou '' permet d’insérer une valeur null dans le champ si celui ci le permet biensur.

 

SQL INSERT INTO avec SUBQUERY (sous-requêtes) provenant d'une autre table.

 
SQL> INSERT INTO scott.niveau(nb_joueur, n_niveau)
  2     SELECT COUNT(*),
  3            j_niveau
  4       FROM scott.joueur
  5   GROUP BY j_niveau ;

4 ligne(s) créée(s).

SQL> SELECT * FROM scott.niveau;

 NB_JOUEUR   N_NIVEAU
---------- ----------
         1          2
         1          4
         1          3
         2          0

SQL> SELECT * FROM scott.joueur;

 ID_JOUEUR J_NOM      J_DT_NAIS    J_NIVEAU
---------- ---------- ---------- ----------
         1 Pierre     01/05/1972          4
         2 Jean       20/08/1975          0
         3 Stephane   15/03/1972          3
         4 Daniel     10/05/1972          0
         5 Sandrine                       2

SQL>

Ici nous avons inseré dans la table NIVEAU avec INSERT INTO le nombre de joueur par niveau provenant de la table JOUEUR.

 

SUPPRESSION ENVIRONNEMENT DE TEST (tables et séquence Oracle).

 
SQL> DROP TABLE SCOTT.NIVEAU CASCADE CONSTRAINTS PURGE;

Table supprimée.

SQL> DROP TABLE SCOTT.JOUEUR CASCADE CONSTRAINTS PURGE;

Table supprimée.

SQL> DROP SEQUENCE SCOTT.SEQ_ID_JOUEUR;

Séquence supprimée.

SQL>

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• CREATE TABLE ORACLE
• Update Table avec MERGE INTO
• Instruction SQL SELECT FROM WHERE
• Oracle SQL SOUS-REQUETES SELECT IN, ANY, ALL
• Instruction SQL GROUP BY
Par Daniel Roesch - Publié dans : COMMANDES SQL DML-LMD
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés