Instruction INSERT
L'instruction INSERT permet de créer des enregistrements dans une table de base de données. Vous pouvez spécifier, au choix :
-
Une ou plusieurs listes de valeurs à insérer en tant que nouveaux enregistrements
-
Une instruction
SELECTpermettant de copier les données d'une autre table et de les insérer sous forme de nouveaux enregistrements
Les formats de l'instruction INSERT sont :
INSERT INTO nom_table [(nom_colonne, ...)] VALUES [(expr, ...), ...]
INSERT INTO nom_table [(nom_colonne, ...)] SELECT nom_colonne, ... FROM nom_table [WHERE expr]
Avec VALUES
nom_colonne est une liste facultative de noms de colonnes qui indique le nom et l'ordre des colonnes dont les valeurs sont spécifiées dans la clause VALUES. Si vous omettez nom_colonne, la liste des expressions (expr) doit fournir des valeurs pour toutes les colonnes définies dans la table et doit figurer dans le même ordre que les colonnes définies pour la table.
La liste des expressions (expr) donne les valeurs des colonnes d'un nouvel enregistrement. Pour ajouter plusieurs enregistrements, spécifiez une liste d'expressions entre parenthèses pour chaque enregistrement, séparées par des virgules. Habituellement, une liste d'expressions se compose d'une valeur constante pour chaque colonne (mais la liste peut également être une sous-requête). Les valeurs de type chaîne de caractères doivent être placées entre guillemets simples ('). Pour inclure un guillemet simple (correspondant à une apostrophe) dans une valeur de type chaîne de caractères placée entre guillemets simples, utilisez deux guillemets simples consécutifs (par exemple 'L''instance').
Les sous-requêtes doivent être entre parenthèses.
Exemple
Insérez deux listes d'expressions.
INSERT INTO emp (nom, prénom, emp_id, salaire, date_recrutement)
VALUES ('Smith', 'John', 'E22345', 27500, DATE '2028-06-05'),
('Marks', 'Alea', 'E24682', 28500, DATE '2029-09-30')
Cette instruction INSERT ajoute un enregistrement à la table de base de données pour chaque liste de valeurs spécifiées. Dans ce cas, deux enregistrements ont été ajoutés à la table de la base de données des employés, emp. Les valeurs sont spécifiées pour cinq colonnes. Les autres colonnes de la table n'ont pas reçu de valeur. Autrement dit, leur valeur est nulle.
Avec SELECT
L'instruction SELECT est une requête qui renvoie des valeurs pour chaque valeur nom_col spécifiée dans la liste de noms de colonnes. L'utilisation d'une instruction SELECT plutôt qu'une liste d'expressions de valeurs vous permet de sélectionner un ensemble de rangées dans une table et de l'insérer dans une autre table à l'aide d'une instruction INSERT unique.
Exemple
Utiliser une instruction SELECT pour l'insertion.
INSERT INTO emp1 (prénom, nom, emp_id, dept, salaire)
SELECT prénom, nom, emp_id, dept, salaire FROM emp
WHERE dept = 'D050'
Dans ce type d’instruction INSERT, le nombre de colonnes à insérer doit être le même que celui des colonnes spécifiées dans l’instruction SELECT La liste de colonnes à insérer doit être identique aux colonnes de l'instruction SELECT comme c’est le cas avec une liste d'expressions de valeurs dans l’autre type d’instruction INSERT. Par exemple, la première colonne insérée correspond à la première colonne sélectionnée, la deuxième à la deuxième colonne sélectionnée, et ainsi de suite.
La taille et le type de données de ces colonnes correspondantes doivent être compatibles. Chaque colonne de la liste SELECT doit avoir un type de données accepté par le pilote client ODBC ou JDBC pour une opération INSERT/UPDATE habituelle sur la colonne correspondante de la liste INSERT. Les valeurs sont tronquées si la taille de la valeur de la colonne SELECT est supérieure à celle de la colonne INSERT correspondante.
L'instruction SELECT est évaluée avant l'insertion de valeurs.
Remarques
-
Dans les types de données de conteneur, vous ne pouvez utiliser
INSERTque pour du texte, à moins de préparer une déclaration paramétrée et de générer le flux de données depuis votre application. Pour utiliser des données binaires, vous pouvez simplement assigner le nom de fichier en l'insérant entre des guillemets simples ou utiliser la fonctionPutAs(). Lorsque vous spécifiez un nom de fichier, le type de fichier est déduit de l'extension de fichier :CopierINSERT INTO nom_table (nom_conteneur) VALUES (? AS 'nomfichier.extension fichier')Les types de fichiers non pris en charge seront insérés en tant que type FILE.
Lorsque vous utilisez la fonction
PutAs(), spécifiez le type :PutAs(col, 'type'), où la valeur du type est un type de fichier pris en charge comme décrit dans Récupération du contenu d'une rubrique Conteneur : fonctions CAST() et GetAs(). -
nom_colonnepeut également spécifier une rubrique multivaluée, par exemple,dernièresDates[4].