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」です。


フィードバック