テキストマネージャで問合せを定義するには

テキストマネージャを使用して問合せの選択基準を定義するには、以下の手順を使用します。問合せの基本プロパティを定義しておく必要があります。問合せの定義を参照してください。

テキストマネージャを使用して問合せの選択基準を定義するには、次の手順を実行します。

ステップ 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 (フィールド) 関数は、選択した数値フィールドの最小値および最大値をそれぞれ出します。

関数を使用する場合に、<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 条件> は 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 で使用される構文については、Infor ES 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 句に入れるだけで十分です。