web-dev-qa-db-ja.com

V5R3M0の情報スキーマから選択*

クライアントのV7R1 AS/400にアクセスでき、SELECT NAME FROM INFORMATION_SCEMA.TABLESのようなクエリを実行できます。

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    TYPE_NAME, 
    COLUMN_SIZE, 
    COLUMN_TEXT
FROM "SYSIBM"."SQLCOLUMNS"
WHERE
    TABLE_SCHEM = 'MYLIB' 
    AND TABLE_NAME = 'SOMEPF'

それで大丈夫。私はそのシステムのQSECOFRです。

ただし、V5R3M0を実行している PUB1.DE の無料のグリーンスクリーンアカウントでは、STRSQLまたはQSH内のdb2コマンドからそのコマンドを実行できません。私も見たINFORMATION_SCHEMA/TABLESの代替フォーマットを試しました。 STRSQLから次のエラーが表示されます。

> SELECT name FROM INFORMATION_SCHEMA/TABLES
  TABLES in QSYS2 type *FILE not found.     
> SELECT name FROM INFORMATION_SCHEMA.TABLES
  Qualified object name TABLES not valid.   

これは権限の問題ですか、V5とV7の構文の違いですか?

2
Justin Dearing

「システム命名規則」モードと「SQL命名規則」モードの違いが発生しています。元々、システム命名モードではスキーマ名で修飾するときに区切り文字としてスラッシュ文字_/_が必要でしたが、SQL命名モードではピリオド_._区切り文字が使用されていました。 v7.1へのアップデートでは、システムの命名を使用するときに、どちらの区切り文字も使用できるようになりました。 V5R3はサポートされておらず、更新もされていません。グリーンスクリーンセッションでは、STRSQL NAMING(*SYS)を指定できます。または、JDBC/ODBC接続文字列設定でシステム命名規則を指定します。

2つのモードには、他にも機能上の違いがあります。 here および here を参照してください。その中で最も重要なのは、CURRENT SCHEMAを指定しない限り、システム命名モードでライブラリリストを使用できることです。ただし、CLでCHGCURLIBコマンドを使用して、またはSQLでCALL QCMDEXC('CHGCURLIB MYLIB',15)を使用して現在のライブラリを指定できます(15はこのサンプルコマンドの長さです)。

DB2 for iカタログビュー はQSYS2にあります。

_SELECT COLNO
      ,SYSTEM_COLUMN_NAME   
      ,DATA_TYPE 
      ,coalesce(PRECISION,LENGTH)        as len
      ,smallint(SCALE)                   as dp
      ,STORAGE                           as bytes
      ,varchar(COLUMN_TEXT,50)           as fldtext  
      ,varchar(substr(LABEL, 1,20),20)   as hdg1
      ,varchar(substr(LABEL,21,20),20)   as hdg2
      ,varchar(substr(LABEL,41,20),20)   as hdg2
      ,CCSID
      ,IS_NULLABLE
FROM QSYS2/SYSCOLUMNS
WHERE SYSTEM_TABLE_SCHEMA = 'MYLIB' 
  AND SYSTEM_TABLE_NAME   = 'SOMEPF'
_

ほとんどのIBM iショップは10文字の名前(オペレーティングシステムルール)を使用し、通常はDB2で許可されている128文字の名前を使用しなかったため、通常はSYSTEM_COLUMN_NAME、SYSTEM_TABLE_NAME、およびSYSTEM_SCHEMA_NAMEで十分です。

Dave Jones に記載されているように、 V5R3 SQLリファレンス はPDFとして入手できます。

3
WarrenT

私はDB2 for iSeriesの専門家ではないので(私の唯一の経験はオンラインで他の人を助けています!)、これは完全に間違っているかもしれません...

Ithinksupport for the standard INFORMATION_SCHEMAは最近追加されました。 DB2 for LUW(私はかなり精通しています)と同様に、INFORMATION_SCHEMAは、おそらくDB2 for iSeriesではQSYS2スキーマにあった「実際の」システムカタログに対する比較的薄いビューのセットです(DB2 for LUWではSYSCATにあり、DB2 for z/OSではSYSIBMにあります)。 。

DB2 for iSeries V5Rxのドキュメントはもうオンラインではないようですが、DB2 for z/OSカタログのようなものであれば、QSYS2.SYSTABLES(必要に応じてQSYS2/SYSTABLESとしてクエリする必要がある)で必要な情報を見つけることができます。使用しているインターフェース)。私の確かにさびた記憶からあなたは次のようなものが欲しいでしょう:

SELECT TABLE_OWNER, TABLE_NAME FROM FROM QSYS2.SYSTABLES

ここで、TABLE_OWNERはスキーマで、TABLE_NAMEは名前です。 SYSVIEWS、SYSCOLUMNS、SYSTRIGGERSなど、他にもさまざまな便利なビューがカタログに含まれているはずです。ダウンロードする価値があるかもしれません 古いDB2 for iSeriesのドキュメントのPDF まだ利用できるようです。システムカタログ構造の情報は、「SQLリファレンス」にあると思います。

1
Dave Jones