Insertions

Ajouter une ligne :

      La syntaxe pour ajouter une ligne est relativement simple quel que soit le SGBDR :

Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> CREATE TABLE t1(c1 INTEGER, c2 CHARACTER VARYING(10)); Table created. SQL> INSERT INTO t1(c1, c2) VALUES(1, 'ESSAI'); 1 row created. postgres=# select version(); version ------------------------------------------------------------- PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit (1 ligne) postgres=# CREATE TABLE t1(c1 INTEGER, c2 CHARACTER VARYING(10)); CREATE TABLE postgres=# INSERT INTO t1(c1, c2) VALUES(1, 'ESSAI'); INSERT 0 1

      Avec Oracle comme avec PostgreSQL, il faut simplement indiquer l’ensemble des colonnes pour lesquelles des valeurs seront explicitement fournies puis fournir ces valeurs avec la clause VALUES.

Ajouter plusieurs lignes :

      Les choses sont un peu différentes lorsqu’il s’agit d’insérer plusieurs lignes. PostgreSQL ou SQL Server permettent d’ajouter ces lignes avec une seule instruction INSERT directement via la clause VALUES alors qu’Oracle ne le permet pas :

Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> INSERT INTO t1 VALUES(2,'ESSAI2'), (3,'ESSAI3'); INSERT INTO t1 VALUES(2,'ESSAI2'), (3,'ESSAI3') * ERROR at line 1: ORA-00933: SQL command not properly ended postgres=# select version(); version ------------------------------------------------------------- PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit (1 ligne) postgres=# INSERT INTO t1 VALUES(2,'ESSAI2'), (3,'ESSAI3'); INSERT 0 2

      Avec Oracle il vous faut utiliser une instruction propriétaire, INSERT ALL, ou plusieurs instructions INSERT ou encore faire un INSERT ... SELECT qui est aussi disponible avec PostgreSQL :

Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> INSERT INTO t1 SELECT 2, 'ESSAI2' FROM dual UNION ALL SELECT 3,'ESSAI3' FROM dual; 2 rows created. postgres=# select version(); version ------------------------------------------------------------- PostgreSQL 9.5.1, compiled by Visual C++ build 1800, 64-bit (1 ligne) postgres=# INSERT INTO t1 SELECT 2, 'ESSAI2' UNION ALL SELECT 3,'ESSAI3'; INSERT 0 2

Autres différences :

      La version 9.5 de PostgreSQL apporte la fonctionnalité d’UPSERT via une clause ON CONFLICT de l’INSERT. Oracle comme SQL Server disposent pour l’UPSERT de l’instruction MERGE définie au niveau du standard SQL. Les équipes de PostgreSQL ont pour l’instant délibérément choisi de ne pas implémenter MERGE pour éviter des confusions dans la gestion de la concurrence.
      Autre extension de PostgreSQL par rapport à la norme : les CTES (with queries) sont disponibles avec l’instruction INSERT alors que le standard SQL ne les définit qu’avec l’instruction SELECT.

Mise à jour : 25/11/2017