問題
次のクエリを実行します。
Contact con = [SELECT ID,FirstName,LastName,Email FROM Contact WHERE LastName = 'Smith'];
姓が「Smith」のレコードがない場合、クエリは何を返しますか。
- 空の値を持つ取引先責任者
- nullに初期化された取引先責任者
- 取引先責任者の空のリスト
- 行が見つからないというエラー
正解
- 空の値を持つ取引先責任者
- nullに初期化された取引先責任者
- 取引先責任者の空のリスト
- 行が見つからないというエラー
解説
それぞれの選択肢の理由について説明します。
□ 空の値を持つ取引先責任者
これは不正解です。SOQLクエリが一致するレコードを見つけられない場合でも、新たに空の値を持つ取引先責任者を作成することはありません。
□ nullに初期化された取引先責任者
これは不正解です。SOQLクエリが一致するレコードを見つけられない場合でも、新たにnullに初期化された取引先責任者を作成することはありません。
□ 取引先責任者の空のリスト
これは不正解です。もしクエリ結果をリスト型に代入しようとしていたなら、これは正しい答えになるかもしれません。なぜなら、SOQLクエリは常にリストを返し、もし結果が存在しない場合は空のリストになるからです。しかし、この問題ではクエリ結果を単一のSObject型変数(con)に代入しようとしており、その結果が0件(または2件以上)の場合、エラーが発生します。
□ 行が見つからないというエラー
これは正解です。この問題では、クエリの結果を単一のSObject型変数に代入しようとしています。SOQLクエリが0件または複数件の結果を返した場合、この代入操作は失敗し、「System.QueryException: List has more than 1 row for assignment to SObject」のようなエラーが発生します。
コメント