この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

SOQL および SOSL クエリ結果の処理

SOQL クエリおよび SOSL クエリは、元のクエリで選択された sObject 項目のデータのみを返します。SOQL クエリまたは SOSL クエリで選択されていない項目 (ID 以外) にアクセスしようとすると、データベースのその項目に値が含まれている場合であっても、ランタイムエラーが発生します。次のコード例では、ランタイムエラーが発生します。

1insert new Account(Name = 'Singha');
2Account acc = [SELECT Id FROM Account WHERE Name = 'Singha' LIMIT 1];
3// Note that name is not selected
4String name = [SELECT Id FROM Account WHERE Name = 'Singha' LIMIT 1].Name;

次のコード例は、ランタイムエラーが発生しないように上記のコードを書き換えたものです。NameId の後に、SELECT ステートメントの一部として追加されています。

1insert new Account(Name = 'Singha');
2Account acc = [SELECT Id FROM Account WHERE Name = 'Singha' LIMIT 1];
3// Note that name is now selected
4String name = [SELECT Id, Name FROM Account WHERE Name = 'Singha' LIMIT 1].Name;

選択された sObject 項目が 1 つのみの場合でも、SOQL クエリまたは SOSL クエリは必ずすべてのレコードとしてデータを返します。その結果、項目にアクセスするには、項目を参照解決する必要があります。たとえば、次のコードは、SOQL クエリでデータベースから sObject リストを取得し、リスト内の最初の取引先レコードにアクセスし、レコードの AnnualRevenue 項目を参照解決します。

1Double rev = [SELECT AnnualRevenue FROM Account
2              WHERE Name = 'Acme'][0].AnnualRevenue;
3
4// When only one result is returned in a SOQL query, it is not necessary
5// to include the list's index.
6Double rev2 = [SELECT AnnualRevenue FROM Account
7              WHERE Name = 'Acme' LIMIT 1].AnnualRevenue;

SOQL クエリ結果で sObject 項目を参照解決する必要がないのは、クエリが COUNT 演算の結果として Integer を返す場合のみです。

1Integer i = [SELECT COUNT() FROM Account];

SOSL クエリで返されるレコードの項目は、必ず参照解決する必要があります。

数式を含む sObject 項目は、SOQL クエリまたは SOSL クエリが発行されたときに項目の値を返します。数式内で使用されているその他の項目に対する変更は、レコードが Apex で保存され、再度クエリされるまでは、数式項目の値に反映されません。その他の参照専用 sObject 項目と同様、数式項目の値自体を Apex で変更することはできません。