DML文による表の操作33 / 50 問

以下の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行が作成されました。

前後の問題