問合せ文からのビュー・オブジェクトの作成

ビュー・オブジェクトをSQL問合せ文から動的に作成するには、アプリケーション・モジュールでcreateViewObjectFromQueryStmt()をコールします。このメソッドはクライアントまたはビジネス・ロジック層からコールできます。どちらの場合も、このメソッドはビュー・オブジェクト・インスタンスを返し、そのインスタンスをメンバーとしてアプリケーション・モジュールのデータ・モデルに追加します。このビュー・オブジェクトはSQL専用で、データの変更には使用できません。また、エキスパート・モードでもあるため、BC4JフレームワークではSELECT * FROM ()内の問合せがラップされます。このため、使用できるSQLは制限されます。たとえば、次の問合せは使用できます。

SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES

これは、次のようにラップされた場合でも有効であるためです。

SELECT * FROM (SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES)

ただし、次の問合せは使用できません。

SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES FOR UPDATE

これは、次のSQLが有効ではないためです。

SELECT * FROM (SELECT UNIQUE DEPARTMENT_ID FROM EMPLOYEES FOR UPDATE)

エンティティ・オブジェクトに基づいたビュー・オブジェクト、またはエキスパート・モードではないビュー・オブジェクトを動的に作成する必要がある場合は、「問合せ句からのビュー・オブジェクトの作成」を参照してください。

createViewObjectFromQueryStatement()には2つのString引数を指定します。最初の引数はデータ・モデル内のビュー慣用名です。2番目はセミコロンのないSQL問合せです。

String viewUsageName="TempVO";
String query="SELECT Employees.EMAIL FROM EMPLOYEES Employees";
ViewObject mgrvo=am.createViewObjectFromQueryStmt(viewUsageName, query);

注意: このメソッドを使用してビュー・オブジェクトを作成すると、最初にデータをフェッチするとき、問合せが2回実行される場合があります。最初の問合せでは、データ型と精度の情報が収集されます。この情報は、データを適切なJava型にマップし、(最大値よりも低い精度を指定して)問合せの効率を上げるために、後の問合せで使用されます。2回実行するとパフォーマンス上問題がある、負荷の高い問合せの場合、回避策として、行を返さないダミーのWHERE句を使用してまずビュー・オブジェクトを作成し、そのビュー・オブジェクトに対してメタデータ問合せと属性定義を容易にするgetAttributeCount()をコールし、次にsetQuery()をコールして、必要に応じて問合せを変更します。このようにすると、最初の問合せは、同じデータセットに対する単純で負荷の高くない問合せになります。


関連項目

コードでのビュー・オブジェクトのメンバーの作成と検索の方法
データ・モデルにあるビュー・オブジェクトのメンバーの検索
データ・モデルへの事前定義済ビュー・オブジェクトの慣用名の追加
問合せ句からのビュー・オブジェクトの作成