SYSIBM.ROUTINESとSYSCAT.ROUTINESはどちらも、実際には「実際の」カタログ表SYSIBM.SYSROUTINESに対するビューです。次のように、各ビューのSQL定義を取得できます。
SELECT TEXT
FROM SYSCAT.VIEWS
WHERE VIEWSCHEMA = 'SYSIBM' AND VIEWNAME = 'ROUTINES';
SELECT TEXT
FROM SYSCAT.VIEWS
WHERE VIEWSCHEMA = 'SYSCAT' AND VIEWNAME = 'ROUTINES';
IBMが独占的であると考えているかどうかわからないため、結果をここに掲載することはしません(結局、DB2自体からの技術的なソースです)。とにかく、ビューのソースを見ると(最初にいくつかの SQL lint -like tool!
- SYSIBM.ROUTINESは、タイプが「T」および「R」の関数を除外します(つまり、テーブルおよび行の関数なので、スカラー関数、集約、およびプロシージャーのみが含まれます)。これはおそらく違いの多くを説明しています。
- SYSIBM.ROUTINESは、スキーマSYSFUN内のルーチンを除外します。 SYSFUNには100以上のルーチンがあるため、これはおそらく違いの残りの部分を説明しています。
- SYSCAT.ROUTINESは、ルーチンをSYSIBMINTERNALスキーマからのみ除外します(これらのルーチンはほんの少ししかありません-上記の制限を前提として、SYSIBM.ROUTINESにall/some/noneが表示されるかどうかは不明です)。
- 各ビューには大量の結合がありますが、それらはすべて1対1であり、SYSIBM.SYSROUTINESによって指示される結果のカーディナリティには影響しません(これらの結合のほとんどは、物事を取り込むためのものです)結果タイプや照合の詳細など)。
背景:
- SYSIBMスキーマのSYSで始まるテーブルは、すべてが基づいているrealカタログテーブルです。これらは文書化されていないため、通常はこれらを気にしません。また、作業するのが少し面倒です(ただし、DB2 for z/OSのように、前回SYSCATを使用していなかったため、SYSCATを使用しなかったため、これらのテーブルしか使用できません。持っている)。
- SYSIBMスキーマのSYSで始まるビューではないの構造は 標準のINFORMATION_SCHEMA と非常に似ています。おそらく何かがそれらをそのまま使用している可能性があります(JDBCメソッド、またはさまざまなドライバーのカタログ関数など)。ただし、それらが文書化されていないため、ビューの定義を見ないで(上記のトリックを使用して)何が含まれている/含まれていないのかを正確に知ることは困難です。 。
- SYSCATスキーマのビューは非常に便利です。それらは 十分に文書化されています であり、一般的に操作が非常に簡単です(残念ながら、これらはLUW固有のDB2でもあります)。
言い換えれば、私は通常、SYSCATの結果を「ゴスペル」として扱いますが、何が表示されているかを正確に理解したい場合は、ソースに飛び込む必要があります。