Help us understand the problem. What is going on with this article?

Apex上でSelect *を実装してみた

More than 5 years have passed since last update.

概要

SOQL上では"Select *"がないので、実装してみました。使う時に注意事項をご確認ください。

多分すでに実装した方はいらっしゃると思いますので、ネタがかぶったら申し訳ありません。

目的

全項目をクエリする時に、いちいち項目を指定するのが面倒な方にはぴったりです。

実装

/**
 * SOQLの"Select *"のクエリStringを取得する
 * @param tableName テーブル名
 * @param whereCondition クエリのWHEREやGROUPBYやORDERBYやLIMITなど
 * @param isCustomFieldOnly カスタム項目のみを取得するフラグ
 * @param staticFields カスタム項目のみの場合、カスタム項目をクエリに含めたらこのパラメーターを使用する
 * @return SOQLクエリString
 **/
public static String getSelectAllQuery(String tableName, String whereCondition, Boolean isCustomFieldOnly, String[] staticFields) {
    Map<String, Schema.SObjectType> m = Schema.getGlobalDescribe() ;
    Schema.SObjectType s = m.get(tableName) ;
    Schema.DescribeSObjectResult r = s.getDescribe() ;
    Map<String, Schema.SObjectField> fields = r.fields.getMap() ;
    string soql = '';
    for (String fieldName : fields.keyset()) {
        if(isCustomFieldOnly && (fieldName.indexOf('__c') < 0)) {
            continue;
        }
        if (soql != '') {
            soql += ', ';
        }
        soql += fieldName;
    }
    for (String fieldName : staticFields) {
        if (soql != '') {
            soql += ', ';
        }
        soql += fieldName;
    }
    soql = 'SELECT ' + soql + ' FROM ' + tableName + ' ' + whereCondition;
    return soql;
}

  • staticFieldsパラメータについて

カスタム項目のみのクエリを生成する際に、いくつか標準項目も取得したい場合使用することができます。

使い方

  • 全項目
String query = getSelectAllQuery('Account', 'WHERE Id=\''+accId+'\'', false, null);
Account accData = Database.query(query);

  • カスタム項目のみ
String[] fields = new String[]{'Name'};
String query = getSelectAllQuery('Account', 'WHERE Id=\''+accId+'\'', true, fields);
Account accData = Database.query(query);

注意事項

全項目をコピ・クローンーするなどの目的では、数式型かどうかや権限も持っているをちゃんとチェックしてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした