constructQuery()
sqlLib.constructQuery() を使用して、比較演算子および値が含まれた辞書に基づいて、SQL 条件 (WHERE 文で使用するもの) を戻すことができます。
構文
sqlLib.constructQuery(
sqlRecord Record inOut,
dictionary Dictionary inOut,
matchByName BOOLEAN in )
returns (condition STRING)
- sqlRecord
- 各レコード・フィールドおよび関連データ型に対応した SQL 列名が含まれています。
- dictionary
- 名前/値のペアが含まれており、名前と sqlRecord 要素のフィールド名がマッチングされています。 値には、演算子および比較値が含まれます。
- matchByName
- matchByName が YES に設定されている場合、辞書の名前は、sqlRecord 要素名と マッチングされ、照会が生成されます。matchByName が NO に設定されている場合は、 辞書の最初の要素がレコードの最初の要素として使用されます (2 番目以降も同様)。 EGL では、要素の数の不一致は無視されます。
- condition
- これを STRING 変数に割り当て、WHERE 文節内で使用します。詳しくは、このトピックの『例』を参照してください。
例
次のサンプル・プログラムでは、お客様レコードと辞書から条件ストリング (myCondition) を作成します。
package com.companyb.gl;
record CustomerRecord type SQLRecord
{tableNames = [["ADMINISTRATOR.CUSTOMER", "L1"]],
keyItems = [customerNumber]}
customerNumber STRING {column="C_NUMBER", maxLen=6};
customerName STRING {column="C_NAME", isSQLNullable=yes, maxLen=25};
customerAddr1 STRING {column="C_ADDR1", isSQLNullable=yes, maxLen=25};
customerAddr2 STRING {column="C_ADDR2", isSQLNullable=yes, maxLen=25};
customerAddr3 STRING {column="C_ADDR3", isSQLNullable=yes, maxLen=25};
customerBalance MONEY {column="C_BALANCE", isSQLNullable=yes};
end
program calc3
myDictionary Dictionary {};
myCustomer CustomerRecord;
myCondition STRING;
function main()
myDictionary.customerNumber = ">A20045";
myDictionary.customerBalance = "!= 0";
myCondition = sqlLib.constructQuery(myCustomer, myDictionary, YES);
prepare stmtID from "SELECT * FROM customer WHERE " + myCondition;
get customerArray with stmtID;
end // main
end // program
myCondition のコンテンツは、「C_NUMBER > 'A20045' AND C_BALANCE <> 0」です。