The SOQL query assigns its result directly to a single sObject variable (Account myAccount). If the query returns more than one record, Salesforce throws aQueryExceptionbecause the system cannot automatically cast multiple results to a single sObject. Not Suitable: Option A: The variable cannot be automatically cast to a list. Option C: The query itself does not fail but throws an exception. Option D: The first record is not automatically assigned. SOQL Query Considerations
* [cite\_start]**0件の場合:** `System.QueryException: List has no rows for assignment to SObject` が発生します [cite: 758-761]。 * [cite\_start]**2件以上の場合:** `System.QueryException: List has more than 1 row for assignment to SObject` が発生します [cite: 764-769]。
最新のコメント (最新のコメントはトップにあります。)
正解は **B** です。
### 正解の解説
**B. 未処理の例外がスローされ、コードが終了します。**
Apexにおいて、SOQLクエリの結果を「単一の sObject 変数(この場合は `Account`)」に直接代入する場合、**クエリ結果は必ず「1件」でなければなりません**。
* [cite\_start]**0件の場合:** `System.QueryException: List has no rows for assignment to SObject` が発生します [cite: 758-761]。
* [cite\_start]**2件以上の場合:** `System.QueryException: List has more than 1 row for assignment to SObject` が発生します [cite: 764-769]。
このコードには `try-catch` ブロックがないため、例外は「未処理(Unhandled)」となり、ガバナ制限やシステム例外と同様にトランザクションが停止(異常終了)します。
-----
### 不正解の解説
**A. 変数 myaccount は自動的に List データ型にキャストされます。**
これは **不正解** です。Apex は静的型付け言語であり、`Account` 型として宣言された変数に `List<Account>` を代入しようとしても、自動的に型が変わることはありません。
**C. クエリが失敗し、デバッグ ログにエラーが書き込まれます。**
これは **不正解** です。単にログにエラーが書かれて処理が続行するのではなく、**例外(Exception)が発生して処理が強制終了**します。挙動の説明として B の方が正確です。
**D. 返された最初のアカウントは myAccount に割り当てられます。**
これは **不正解** です。
もしクエリの末尾に `LIMIT 1` がついていれば、最初のアカウントが割り当てられて成功しますが、`LIMIT 1` がない状態で複数件が返されると、システムは「どれを代入していいか不明(あるいは開発者の意図したデータが一意でない)」と判断し、例外をスローします。
### 💡 正しい書き方
複数返る可能性がある場合は、**リスト (`List<Account>`)** で受け取るか、**`LIMIT 1`** をつける必要があります。
```apex
// パターン1: リストで受け取る (0件でも複数件でもエラーにならない)
List<Account> accList = [SELECT Id, Name FROM Account];
// パターン2: 1件だけ欲しい場合 (LIMIT 1 をつける)
Account myAccount = [SELECT Id, Name FROM Account LIMIT 1];
```...