Derbyサーバーでは、各表の制約名を取り出すために、スキーマのシステム表の情報を使用してselect文を作成する方法はありますか?Derby - 制約
5
A
答えて
6
関連マニュアルはDerby Reference Manualです。多くのバージョンが利用可能である:10.13は2017年4月に現在のだったが、ダービーの十分最近のバージョンは、システム・カタログ表ことを必要とするので、それはオリジナルの答え
SELECT c.constraintname, t.tablename
FROM sysconstraints c, systables t
WHERE c.tableid = t.tableid;
2009年5月に10.3
ました(10.13はcommentにkiwicomb123で引用されている)、あなたも表記を、JOIN、および使用明示的に使用するようにクエリを修正することができますsys.
を前置されています
SELECT c.constraintname, t.tablename
FROM sys.sysconstraints c
JOIN sys.systables t
ON c.tableid = t.tableid;
余分な列を追加できます(たとえば、c.type
)。制約の種類を取得できます。
2
SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule
FROM sys.sysconstraints co
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid
JOIN sys.systables t ON co.tableid = t.tableid
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid
JOIN sys.systables t2 ON co2.tableid = t2.tableid
JOIN sys.syskeys k ON co2.constraintid = k.constraintid
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid
WHERE co.type = 'F'
and sc.schemaname = current schema
2つの記述子エントリは
BTREEように、各テーブルの列番号のリストが含まれている数字はためSYSCOLUMNSテーブルの列番号に対応する(2,1)
対応する表。
誰もがこのクエリでこれを抽出する優雅な方法を持っている場合、私は知りたいと思います。私は、別のクエリでテーブルのすべての列のリストを取得しており、数値を取得するためにディスクリプタを解析した後に名前を抽出しています。
関連する問題
- 1. Derby外部キー制約の問題
- 2. Spring Hibernate Forgeinのキー制約
- 3. UNIQUE制約にHibernate
- 4. 制約レイアウト変更制約をプログラム
- 5. 制約
- 6. 制約
- 7. 制約
- 8. 制約
- 9. 制約
- 10. 制約
- 11. MVCルーティング制約
- 12. Oracleの制約
- 13. チェック制約
- 14. チェック制約
- 15. パラメータの制約
- 16. 制約をオーバーライド
- 17. Symfonyの制約
- 18. 制約レイアウト
- 19. 制約エラー
- 20. psql:ForeignKey制約名
- 21. PIP制約ファイル
- 22. ユニーク制約
- 23. チェック制約
- 24. Pythonパルプ制約
- 25. NULL制約は
- 26. FactoryGirl - ユニーク制約
- 27. カスタムバリデータ制約3
- 28. ジェネリック制約
- 29. カーディナリティ制約は
- 30. ジャンゴユニーク制約が
制約タイプを知る方法もありますか? –
私はあなたのためにRTFMできると思います。 Sysconstraints.Typeは、 'U'(ユニーク)、 'P'(プライマリ)、 'F'(外部キー)または 'C'(チェック)のいずれかの値を持つCHAR(1)フィールドです。しかし、ドキュメントへのポインタが与えられたときには、通常、ドキュメントを読んで読むのが賢明です。 –
この問合せはDerby 10.13では機能しません。テーブル名sysconstraintsとsysconstraintsの前に "sys"を付ける必要があります。例:sysconstraintsではなくsys.sysconstraintsを使用します。 – kiwicomb123