W serwerze Derby, w jaki sposób można korzystać z informacji w tabelach systemowych schemat aby utworzyć SELECT w celu pobrania nazwy ograniczenie dla każdej tabeli?Derby - ograniczenia
Odpowiedz
Odpowiednią instrukcją jest Derby Reference Manual. Istnieje wiele wersje: 10.13 był obecny w kwietniu 2017 roku, ale było to 10,3 w maju 2009.
odpowiedź Original
SELECT c.constraintname, t.tablename
FROM sysconstraints c, systables t
WHERE c.tableid = t.tableid;
Od wystarczająco najnowsze wersje Derby wymagają tabelach katalogu systemowego są poprzedzone sys.
(10,13 cytowany przez kiwicomb123 w comment), można zmienić kwerendę aby użyć notacji zbyt wyraźne JOIN i zastosowanie:
SELECT c.constraintname, t.tablename
FROM sys.sysconstraints c
JOIN sys.systables t
ON c.tableid = t.tableid;
Możesz dodać dodatkowe kolumny - na przykład c.type
, aby uzyskać typ ograniczenia.
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
dwa wpisy deskryptor zawiera listę numerów dla każdej kolumny tabeli, takie jak
btree (2,1)
gdzie numery odpowiadają numerom w kolumnie w tabeli SYSCOLUMNS dla odpowiednia tabela.
Jeśli ktoś ma elegancki sposób wydobycia tego w tym zapytaniu, chciałbym to wiedzieć. Otrzymuję listę wszystkich kolumn dla tabeli w osobnym zapytaniu i wyodrębnianie nazw z tego po przeanalizowaniu deskryptorów, aby uzyskać liczby.
- 1. Derby: odpowiednik CONCAT
- 2. mysql zrzutu na derby
- 3. Derby z RESTful API
- 4. źródeł danych derby - odmowa połączenia
- 5. Omów schemat w kwerendzie DERBY
- 6. "SecurityException: naruszenie uszczelnienia" podczas uruchamiania połączenia Derby
- 7. nodeJS-Express lub Meteor lub Derby
- 8. Automatyczna inkrementacja Derby i Eclipselink UnitOfWork
- 9. Java DB/Apache Derby z Androidem
- 10. zmiennoprzecinkowej Ograniczenia
- 11. ograniczające ograniczenia
- 12. Ograniczenia ElasticSearch
- 13. Ogólne ograniczenia przeciążenia metod:
- 14. Laravel sprawdź naruszenie ograniczenia
- 15. Ograniczenia użycia Firebase FCM
- 16. Symfony2 Zastąp Ograniczenia
- 17. Scala Generics Typ Ograniczenia
- 18. ograniczenia matematyczne w python?
- 19. Ograniczenia JavaScript setInterval?
- 20. Ograniczenia XSD dotyczące atrybutu
- 21. Ograniczenia lokalizacji Androida
- 22. wady lub ograniczenia plv8?
- 23. sprawdź framework elementu ograniczenia
- 24. Lista ograniczenia nierówności
- 25. Odtwórz 2 ograniczenia formularza
- 26. klucz podstawowy naruszenia ograniczenia
- 27. Ograniczenia z Java Hotswap
- 28. Ograniczenia Android SharedPreferences?
- 29. Ograniczenia MySQL i Check
- 30. Ograniczenia parametrów typu Scala
Czy istnieje również sposób sprawdzenia typu ograniczenia? –
Myślę, że mogę dla ciebie RTFM. Sysconstraints.Type to pole CHAR (1), które ma jedną z wartości "U" (unikatowe), "P" (pierwotne), "F" (klucz obcy) lub "C" (sprawdzenie). Jednak, gdy podaje się wskazówki do dokumentacji, zwykle rozsądnie jest przejść do przeczytania dokumentacji. –
Ta kwerenda nie działa w Derby 10.13, należy poprzedzić nazwy tabel sysconstraints i sysconstraints słowem "sys.". Na przykład: użyj sys.sysconstraints zamiast sysconstraints. – kiwicomb123