| # テキストマネージャで問合せを定義するには テキストマネージャを使用して問合せの選択基準を定義するには、以下の手順を使用します。問合せの基本プロパティを定義しておく必要があります。問合せの定義を参照してください。 テキストマネージャを使用して問合せの選択基準を定義するには、以下の手順を実行します。 手順 1. テキストエディタを開始する データの問合せ (ttadv3580m000) セッションで、新規問合せを選択し、特定 メニューのテキストマネージャ を選択します。テキストエディタが開始されます。 手順 2. 問合せのソースコードを入力するか、修正します。 ソースコードの構文は、標準 SQL に似ています。また、ディクショナリ (REFERS TO) の参照を使用することができます。これにより、データディクショナリに定義された参照を、関連付けられたフィールドとともに使用できます。 問合せの一般的な構造は次のとおりです。
    SELECT <select リスト>
    FROM <from リスト>
    [ WHERE <where 句> ]
    [ GROUP BY <group by リスト>
    [ HAVING <having 句> ] ]
    [ ORDER BY <order by リスト> ]
例のステートメントは、大文字で表記されています。テキストエディタでは大文字および小文字の両方を使用することができます。 問合せ構文の詳細と例については、問合せの構造を参照してください。 注意 テーブルの表示 (ttadv3584m000) セッションを開始して、テーブルとテーブルフィールドのリストを表示できます。セッションを開始するには、以下のステップを実行します。 複数行テキストエディタで、オプションメニューのズームセッションの開始を選択します。 ASCII テキストエディタで、Esc キーを押し、次に Ctrl + Z キーを押します。 手順 3. 変更内容を保存し、テキストエディタを閉じます。 問合せの出力タイプに従って、問合せレポートの生成、または問合せフィールドのチャートへの追加ができます。問合せの定義を参照してください。 重要 以前に簡易 SQL を使用して定義した問合せを、テキストマネージャで修正できます。 問合せテキストで以下のいずれかを使用した場合は、簡易 SQL で問合せをメンテナンスできなくなります。 OR ブール演算子 BETWEEN 述部 HAVING 節 大括弧 結合フィールド ワイルドカード 数値式 文字列式 問合せの構造 SELECT <select リスト> には 1 つ以上のテーブルフィールドが含まれます。これらのフィールドを 1 行に置くことができますが、必ずカンマで区切ります。 繰返しフィールドの一部を選択する場合、このテーブルフィールドには括弧で囲んだ部分番号を後に付けなければなりません。繰返しフィールドでは関数は使用できません。 例 1
    select ttadv421.cpac, ttadv421.cmod, ttadv421.flno, ttadv421.vers,
    ttadv421.rele, ttadv421.cust, ttadv421.indn, ttadv421.part(1),
    ttadv421.part(2), ttadv421.part(5)
    from ttadv421
またワイルドカード * も使用することができます (テキストマネージャのみ)。たとえば、select *、あるいは select ttadv421.* のように使用します。簡易 SQL に問合せをロードすると、ツールによりワイルドカードが個別フィールドに変換されます。 <select リスト> では、次の関数を使用することができます。 COUNT SUM AVG MIN MAX COUNT (フィールド) 関数は、選択した問合せのレコード数を出します。 SUM (フィールド) 関数は、選択した数値フィールドの値の合計を出します。 AVG (フィールド) 関数は、選択した数値フィールドの値の平均を出します。 MIN (フィールド) 関数および MAX (フィールド) 関数は、選択した数値フィールドの最小値および最大値をそれぞれ出します。 関数を使用する場合に、<select リスト> に関数以外のフィールドがあるときは、これらのフィールドを <group by> に置かなければなりません。簡易 SQL で関数を使用する場合は、ツールにより、その他の選択フィールドについて <group by> ステートメントが自動生成されます。 1 つのテーブルフィールド (繰り返しではない) で複数の関数を使用する場合は、テキストエディタを使用してこれらの関数をバインドする必要があります。このためには、関数の後にコロンとバインド変数を付けます。バインド変数は int0..int9 または float0..float9 の形式でなければなりません。int 変数は整数値としての関数の結果を表示し、float は浮動小数点数としての結果を表示します。したがって、この構文を数値フィールド以外で使用することはできません。 例 2
    select ttaad220.user,
    min(ttaad220.comp):int0,
    max(ttaad220.comp):int1
    from ttaad220
    group by
    ttaad220.user
この問合せは、権限を持つ会社の番号が最小および最大のユーザのリストを出力します。 開始 <from リスト> には、ツールが問合せの対象とするテーブル名が必要です。テーブル名はカンマで区切らなければなりません。 例 3
    select ttaad210.user, ttaad220.comp
    from ttaad220, ttaad210
    where ttaad210.user = ttaad220.user and ttaad210.term = tty1"
この問合せは、端末権限および会社権限を持ち、ポート tty1 から bshell を起動することを許可されたユーザのリストを、関連する会社番号とともに出力します。 WHERE 最後の例では、<where 句> が使用されています。<where condition> は 0 以上の部分式から構成される式です。部分式はテキストマネージャでのみ入力することができます。式は次のようなフォームになります。
    <オペランド> <演算子> <オペランド>
    <オペランド>は次のいずれかです。
数値定数 (たとえば、10) 結合フィールド定数 (テキストマネージャを介してのみ) 文字列定数 (たとえば、zzzzzz) テーブルフィールド (たとえば、ttaad200.user) フィールドを使用した数値式 (たとえば、tttxt004.coln - tttxt004.scol) 文字列式 (たとえば、ttadv230.cpac & ttadv230.vers) 特定フィールド (たとえば、列挙定数と日付) 数値式および文字列式は、テキストマネージャを介してのみ使用することができます。 <演算子> は次のいずれかです。 比較演算子: =、<、<=、>、=>、<>、(NOT) LIKE 集合演算子: (NOT) IN (テキストマネージャを介してのみ) 中間演算子: (NOT) BETWEEN、(NOT) INRANGE (テキストマネージャを介してのみ) 存在演算子: (NOT) EXISTS (テキストマネージャを介してのみ) 参照: <テーブルフィールド> REFERS TO <テーブル> この参照は、すでにディクショナリで定義されていなければなりません。 簡易 SQL では式と式の間は AND のみ使用することができます。テキストマネージャでは OR も使用することができます。 例 4
    select
    tttxt004.opwd
    from
    tttxt004
    where
    tttxt004.tbox = tttxt.tbox.nmline  and
    tttxt004.coln - tttxt004.scol <= 76
例 5
    select
    ttadv230.desc, ttadv230.cpac, ttadv230.vers, ttadv230.rele,
    ttadv230.cust, ttadv230.cmod, ttadv230.cprs
    from
    ttadv230
    where
    ttadv230.crdt > date(1993,1,26) and
    ttadv230.cpac & ttadv230.vers = tt6.1"
例 6
    select
    ttaad110.dsca
    from
    ttaad110,
    ttadv300
    where
    ttadv300.clan refers to ttaad110 and
    ttadv300.cpac = "tt" and
    ttadv300.cmod = "adv" and
    ttadv300.cfrm = "3100s000d"
例 7
    select
    ttaad200.user
    from
    ttaad200
    where
    ttaad200.name such as .*u.*
例 4 では、列挙フィールドおよび数値式が使用されています。例 5 では、日付フィールドおよび文字列式を利用しています。例 6 では、参照が使用されています。例 7 では、like 演算子を利用しています。like で使用される構文については、ERP LN 6.1 Programmer's Guide で文字列正規表現の expr.compile 関数を参照してください。 結果として例 4 は、｢列数 - 先頭列｣ が 76 以下のボックスタイプラインを持つウィンドウタイプを生成します。 例 5 の出力は、パッケージコードおよびバージョンが tt6.1 で 1993 年 1 月 26 日以降に作成されたプログラムスクリプトの記述、パッケージコード、バージョン、リリース、カスタマイズ、モジュールコード、スクリプトコードなどから構成されます。 例 6 の出力は、ttadv3100m000d フォームにあるすべての言語の (記述の) 集合です。 例 7 は文字 u を含むすべての bshell ユーザの名前を生成します。 例 8
    select
    tccom010.nama
    from
    tccom010
    where
    tccom010.crep <> 0
    and NOT
    tccom010.crep IN ( select tccom001.emno from tccom001 where tccom001.ccty = "USA" )
この問合せは、販売担当がアメリカ合衆国に住んでいない顧客を選択します。この問合せを次のように書き換えることができます。
    select
    tccom010.nama
    from
    tccom010
    where
    tccom010.crep IN ( select tccom001.emno from tccom001
    where
    tccom001.ccty <> "USA" )
例 9 結合フィールドの値は中括弧で囲み、フィールドはカンマで区切ります。文字列値は引用符で囲みます。
    select
    ttadv111.stat
    from
    ttadv111
    where
    ttadv111.cmba = { "tt","6.1","a" }
例 10
    select
    tccom020.suno, tccom020.nama
    from
    tccom020
    where exists
    ( select *
    from   timps053
    where  timps053.suno = tccom020.suno )
グループ分類 <group by 句> を使用して <select リスト> からフィールドのグループを選択し、グループのレコード数 (count)、合計 (sum)、平均 (average)、最小値 (min)、または最大値 (max) を調べることができます。<group by 句>を使用して、結果の重複を省くこともできます。 例 11
     select
    sum(ttadv303.leng), ttadv303.cpac, ttadv303.cmod, ttadv303.clan from ttadv303
    group by ttadv303.clan, ttadv303.cmod, ttadv303.cpac
この例の出力は、パッケージ - モジュール - 言語の各グループの、フィールド ttadv303.leng (特殊な長さフィールド) の値の合計です。言い換えれば、それぞれのパッケージ、モジュール、言語の組合せについて合計が計算されます。 Having <having 句> は、グループで選択をするのに使用されます。要素は <select リスト> にあります。 例 12
     select
    sum(ttadv303.leng), ttadv303.cpac, ttadv303.cmod, ttadv303.clan from ttadv303
    where ttadv303.clan = "2" group by ttadv303.clan, ttadv303.cmod, ttadv303.cpac
    having sum(ttadv303.leng) < 1000
この例の出力は、パッケージ - モジュール - 言語の各グループのフォーム上の、特殊フィールドの長さの合計です。条件は言語が英語 (言語コード 2) でありフィールドの合計の長さが 1000 未満であることです。 並び順 問合せの出力をソートできます。<order by 句> を使用して、各フィールドのソート順を指定できます。 2 とおりのソートができます。 昇順 (デフォルト) 降順 例 13
    select ttaad200.user
    from ttaad200
    order by ttaad200.user desc
この例では、降順 (z から a) の bshell ユーザのリストが生成されます。 count (フィールド) のような関数フィールドでソートすることもできます。フィールドは <select リスト> 内の連番によって置き換えられます。 例 14
    select
    ttadv200.cpac, count(ttadv200.cses)
    from
    ttadv200
    group by
    ttadv200.cpac
    order by
    2 desc
繰返しフィールドの様々な部分を order by 句に置くことができますが、常に繰返しフィールド全体によってソートされる結果になります。したがって、繰返しフィールドの一部を order by 句に入れるだけで十分です。 |