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

Newer Version Available

This content describes an older version of this product. View Latest

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 で変更することはできません。