以下のSQL文で、どのような結果が返されますか。
DESC employees
名前 NULL? 型
-------------------- -------- ------------
EMPLOYEE_ID NOT NULL NUMBER(6)
SALARY NOT NULL NUMBER(8,2)
INSERT INTO employees
VALUES (100, 1000), (101, 2000), (102);A3件のデータが挿入される
B2件のデータが挿入される
C1件のデータが挿入される
Dエラーになる✓
正解:D解説
Oracle Database 23ai以降では、表値コンストラクタを使ってVALUES句に複数の行をカンマ区切りで指定できます。
しかし、列リストを省略したINSERT文では、表のすべての列(2列)の値を各行に指定する必要があります。
3行目の(102)は値が1つしかないため、INSERT文全体がエラーになります。
エラーになったSQL文は文全体が取り消される(文レベルのロールバック)ため、正しく書かれた1行目と2行目も含めて1件も挿入されません。
正しい書き方の例
INSERT INTO employees
VALUES (100, 1000), (101, 2000), (102, 3000);
3行が作成されました。