5

私はまだ少し初心者なので、この質問が少し明白な場合はご容赦ください。答えを探しましたが、見つけた答えがどのように適用されるのか理解できなかったか、単に答えを見つけることができませんでした。

SQLExplorer(Squirrel SQLに基づく)を介してSQLを使用してアクセスしているDB2foriサーバーに大規模なデータベースが格納されています。表は非常に不十分に文書化されており、ビジネスの最初の順序は私の道を見つける方法を考え出すことです。

これを行う簡単なクエリを書きたいと思います。

1)データベース全体を検索して、「備考」(フィールドの説明を含む)という列を含むテーブルを探すことができます。

2)次に、その列でキーワードを検索します。

3)そのキーワードを含むテーブルの名前を含むテーブルを返したい(名前だけで、後でアルファベット順にテーブルを検索し、必要に応じて内部を調べることができます)。

私はこの検索を超軽量にする必要があり、私が説明する概念がそれを達成することを望んでいます。多くのリソースを消費するものは、サーバーのシステム管理者を怒らせる可能性があります。

私が試したことを示すために(そして私が完全な初心者であることを示すために)、これが私がこれまでに得たものです。

SELECT *
FROM <dbname>
WHERE Remarks LIKE '<keyword>'

気軽にモックしてください、私はばかだと言いました:-)。

何か助けはありますか?おそらく少なくとも正しい方向へのプッシュ?

PS-SQLExplorerで検索関数を見つけることができないようです。おそらく、単純な検索またはフィルターを使用してこの同じ目標を達成できるかどうかを誰かが知っている場合、それは素晴らしいことです。

4

3 に答える 3

7

システムカタログを照会して、テーブルを識別することができます。

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME 
FROM QSYS2.SYSCOLUMNS WHERE UPPER(DBILFL) = 'REMARKS'

次に、各テーブルを個別にクエリします。

SELECT * FROM TABLE_SCHEMA.TABLE_NAME WHERE Remarks LIKE '%<keyword>%'

パターン式の詳細については、LIKE述語を参照してください。

于 2012-12-06T19:11:34.323 に答える
3

通常、私はこのようなものを使用します

SELECT TABLE_SCHEMA, TABLE_NAME
       ,COLUMN_NAME,SYSTEM_COLUMN_NAME,COLUMN_HEADING          
       ,DATA_TYPE, "LENGTH",NUMERIC_SCALE
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%' 

@ JamesA、私はV6R1にいます。デフォルトでは、通常のユーザーはQSYSでQADBIFLDにオブジェクトを送信することを許可されていません。

于 2012-12-07T02:00:39.017 に答える
1

一般に、ほとんどではないにしても多くのIBM iショップ(特にRPGを使用するショップ)は、10(またはそれ以下)の文字スキーマ名とテーブル名に固執し、「システム」列名には10(またはそれ以下)の文字名を使用します。列名も提供されます。列テキストは通常​​、各フィールドを説明します。

SELECT SYSTEM_TABLE_SCHEMA, SYSTEM_TABLE_NAME
      ,SYSTEM_COLUMN_NAME,         
      ,DATA_TYPE, "LENGTH",NUMERIC_SCALE
      ,CHAR(COLUMN_TEXT) 
FROM QSYS2.SYSCOLUMNS
WHERE UPPER(COLUMN_NAME) LIKE '%REMARK%' 
于 2012-12-07T05:47:03.397 に答える