Loading

Apex 에러 'List has no rows for assignment to SObject (SObject에 할당할 행이 목록에 없음)'

게시 일자: Jun 17, 2024
상세 설명


다음 쿼리는 어떤 수의 레코드도 반환하지 않습니다.

"[SELECT Id FROM Account WHERE Id = :Trigger.new[0].Account__c]"

쿼리에서 행을 반환하지 않을 경우 오류 "SObject에 할당할 행이 목록에 없음"이 발생합니다.

솔루션
 
 
SELECT는 일반적으로 배열/목록을 반환하지만 해당 문은 한 행만 반환된다고 가정하는 줄임 구문을 사용합니다. 분명하지 않은 것은 정확히 하나의 행이 반환된다고 가정한다는 것입니다.
 
Contact의 경우 이러한 상황이 발생할 가능성은 낮지만 특히 다음과 같이 0행을 반환할 수 있는 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;

일반적으로 테스트를 만들지 않으려는 상황 중 하나이므로 가능성을 피하는 것이 더 안전합니다.
Knowledge 기사 번호

000385697

 
로드 중
Salesforce Help | Article