Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Apex エラー「List has no rows for assignment to SObject (sObject に割り当てる行がリストにありません)」

公開日: Jun 17, 2024
説明

以下のクエリはレコードを一切返しません:
"[SELECT Id FROM Account WHERE Id = :Trigger.new[0].Account__c]"
クエリがレコードを返さない場合、「List has no rows for assignment to SObject」というエラーが発生します。

解決策
 
 
通常、SELECT は配列/リストを返しますが、これらのステートメントは 1 行のみが返されることを想定した簡略構文を使用しています。見逃しやすいのは、1 行のみが正確に返されることも想定しているという点です。
 
取引先責任者ではそのようなことは起こりにくいのですが、カスタムオブジェクトで、特に 1 行も返されない可能性のある WHERE ステートメントを使用している場合には起こり得ます。例:
 
Player__c player = [SELECT Id from Player__c where Name = :username];
if (player != null)
p = player.Id;

一致するユーザ名を持つ Player__c レコードが存在しない場合、このコードはエラーとなります。実際には NULL を返しません。
 

次のコードのほうが安全です。
Player__c[] players = [SELECT Id from Player__c where Name = :username];
if (players.size() > 0)
p = players[0].Id;

これはテストを作成している状況ではないため、エラーの可能性を避けた方が安全です。
ナレッジ記事番号

000385697

 
読み込み中
Salesforce Help | Article