Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 00:18:09 von Christoph Herrmann

Hi,

ich habe mich sehr mit PDO angefreundet, allerdings hätte ich gerne eine
Möglichkeit gefunden, eine Liste der Namen aller Tabellen zu bekommen?

Gibt es hier zufällig eine mir unbekannte Möglichkeit, die bei allen DB
Systemen (oder zumindest für die von PDO unterstützten) gleich ist oder
komme ich nicht drumrum für jeden DB Treiber von PDO eigene Methoden zu
bauen?

Bisher bekannt ist mir nur das Statement für MySQL ("SHOW TABLES"), aber
dies ist ja schon mal nicht portierbar.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 07:32:53 von mueller

Christoph Herrmann wrote:

> Hi,
>
> ich habe mich sehr mit PDO angefreundet, allerdings hätte ich gerne eine
> Möglichkeit gefunden, eine Liste der Namen aller Tabellen zu bekommen?
>
> Gibt es hier zufällig eine mir unbekannte Möglichkeit, die bei allen DB
> Systemen (oder zumindest für die von PDO unterstützten) gleich ist oder
> komme ich nicht drumrum für jeden DB Treiber von PDO eigene Methoden zu
> bauen?
>
> Bisher bekannt ist mir nur das Statement für MySQL ("SHOW TABLES"), aber
> dies ist ja schon mal nicht portierbar.
>

Information Schema, definiert in SQL92

Damit die allwissende Müllhalde beglücken und Dir wart geholfen ;)

HTH
Robert

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 08:52:41 von Christoph Herrmann

Robert Müller schrieb:
> Information Schema, definiert in SQL92

Damit nicht alle suchen müssen, die das brauchen :) das müsste es sein
was Robert gemeint hat:

select table_name from information_schema.tables where table_schema =
'datenbank'

Habe es bei MySQL versucht und es funktioniert ohne Probleme. Ich
vertraue einfach mal darauf, dass es bei anderen Datenbanken auch auf
diese Art funktioniert.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 10:17:07 von Boris Stumm

Christoph Herrmann wrote:
> Robert Müller schrieb:
> select table_name from information_schema.tables where table_schema =
> 'datenbank'

(ok man könnte das jetzt Erbsenzählerei nennen, aber ich kann mirs
nicht verkneifen :-)

table_schema = 'schema', nicht 'datenbank'. Eine Datenbank kann mehrere
Schemas enthalten, zumindest ist das so bei allen DBVS, die ich kenne.

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 10:51:28 von Christoph Herrmann

Boris Stumm schrieb:
> (ok man könnte das jetzt Erbsenzählerei nennen, aber ich kann mirs
> nicht verkneifen :-)
>
> table_schema = 'schema', nicht 'datenbank'. Eine Datenbank kann mehrere
> Schemas enthalten, zumindest ist das so bei allen DBVS, die ich kenne.

ich konnte jetzt nur bei MySQL schauen, dort steht unter der Spalte
"table_schema" immer der Name der Datenbank. Eine andere Spalte extra
für die Datenbank geht nicht. Ich will ja nur die Tabellen einer
Datenbank haben (die aktuelle).

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 12:09:45 von meissnerj

Christoph Herrmann schrieb:
> Boris Stumm schrieb:
>> (ok man könnte das jetzt Erbsenzählerei nennen, aber ich kann mirs
>> nicht verkneifen :-)
>>
>> table_schema = 'schema', nicht 'datenbank'. Eine Datenbank kann mehrere
>> Schemas enthalten, zumindest ist das so bei allen DBVS, die ich kenne.
>
> ich konnte jetzt nur bei MySQL schauen, dort steht unter der Spalte
> "table_schema" immer der Name der Datenbank. Eine andere Spalte extra
> für die Datenbank geht nicht. Ich will ja nur die Tabellen einer
> Datenbank haben (die aktuelle).
>
In MySQL ist Datenbank und Schema auch das Gleiche. Du kannst bei MySQL
auch mit einer Datenbank verbunden sein, und auf eine andere per
Unterabfrage zugreifen. Bei Systemen die zwischen Schema und Datenbank
unterscheiden, geht das glaube ich nicht oder nicht zwingend, sondern
nur auf ein anderes Schema in der selben Datenbank.

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 12:29:46 von Christoph Herrmann

Jens Meißner schrieb:
> In MySQL ist Datenbank und Schema auch das Gleiche. Du kannst bei MySQL
> auch mit einer Datenbank verbunden sein, und auf eine andere per
> Unterabfrage zugreifen. Bei Systemen die zwischen Schema und Datenbank
> unterscheiden, geht das glaube ich nicht oder nicht zwingend, sondern
> nur auf ein anderes Schema in der selben Datenbank.

aber wie kann ich dann bei dem View sagen, dass ich die Tabellen der
einen Datenbank haben will, wenn ich nur das Schema angeben kann? Dies
wäre ja nur ein Nebeneffekt weils in MySQL das selbe ist. Oder die Views
sind bei anderen Datenbanken anders aufgebaut, wo wir dann wieder am
Anfang wären. ^^--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 14:03:24 von Andreas Froede

Jens Meißner wrote:

> In MySQL ist Datenbank und Schema auch das Gleiche.

Vermutlich kennt MySQL kein Schema?

> Du kannst bei MySQL
> auch mit einer Datenbank verbunden sein, und auf eine andere per
> Unterabfrage zugreifen. Bei Systemen die zwischen Schema und Datenbank
> unterscheiden, geht das glaube ich nicht oder nicht zwingend, sondern
> nur auf ein anderes Schema in der selben Datenbank.

Hängt davon ab, ob cross-Database-Links im DBMS implementiert (und erlaubt)
sind oder nicht.

CIAO
andreas
--
.... oben geht es um den Thron - unten geht es um Deinen Hintern ...
[Keimzeit]
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 14:05:21 von Andreas Froede

> aber wie kann ich dann bei dem View sagen, dass ich die Tabellen der
> einen Datenbank haben will, wenn ich nur das Schema angeben kann?

Üblich (cross-database-links vorausgesetzt) ist:
..



CIAO
andreas
--
.... oben geht es um den Thron - unten geht es um Deinen Hintern ...
[Keimzeit]
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 14:32:57 von Christoph Herrmann

Andreas Froede schrieb:
>> aber wie kann ich dann bei dem View sagen, dass ich die Tabellen der
>> einen Datenbank haben will, wenn ich nur das Schema angeben kann?
>
> Üblich (cross-database-links vorausgesetzt) ist:
> ..



Funktioniert aber in dem Zusammenhang doch gar nicht. Das wäre ja dann:

select table_name from information_schema.tables where table_schema =
'.'

Aber schon bei MySQL steht in der Spalte nur der Datenbankname drin.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 15:48:50 von Andreas Froede

Christoph Herrmann wrote:
> Andreas Froede schrieb:
> >> aber wie kann ich dann bei dem View sagen, dass ich die Tabellen der
> >> einen Datenbank haben will, wenn ich nur das Schema angeben kann?
> >
> > Üblich (cross-database-links vorausgesetzt) ist:
> > ..


>
> Funktioniert aber in dem Zusammenhang doch gar nicht. Das wäre ja dann:
>
> select table_name from information_schema.tables where table_schema =
> '.'

Achso.
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'schema' and catalog_name = 'db'

CIAO
andreas
--
.... oben geht es um den Thron - unten geht es um Deinen Hintern ...
[Keimzeit]
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 16:05:18 von Christoph Herrmann

Andreas Froede schrieb:
> Achso.
> SELECT table_name
> FROM information_schema.tables
> WHERE table_schema = 'schema' and catalog_name = 'db'

die Spalte "catalog_name" gibt es in MySQL nicht...

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste der Namen aller Tabellen einer Datenbank verschiedener Systeme

am 25.01.2008 19:47:58 von meissnerj

Christoph Herrmann schrieb:
> Andreas Froede schrieb:
>> Achso. SELECT table_name FROM information_schema.tables WHERE
>> table_schema = 'schema' and catalog_name = 'db'
>
> die Spalte "catalog_name" gibt es in MySQL nicht...
>
Wie bereits gesagt: In MySQL sind schema/catalog und database das
gleiche. MySQL bildet damit aber eine Ausname. Dann musst du
catalog_name bei mysql ebend weglassen. MySQL hält sich nun mal nicht an
alle Standards. Dafür ist es aber schnell und lässt sich relativ leicht
administrieren.

Re: Liste der Namen aller Tabellen einer Datenbank verschiedenerSysteme

am 25.01.2008 21:32:54 von Christoph Herrmann

Jens Meißner schrieb:
> Wie bereits gesagt: In MySQL sind schema/catalog und database das
> gleiche. MySQL bildet damit aber eine Ausname. Dann musst du
> catalog_name bei mysql ebend weglassen. MySQL hält sich nun mal nicht an
> alle Standards. Dafür ist es aber schnell und lässt sich relativ leicht
> administrieren.

Jep, ich mag und nutze selbst ja nur MySQL. Aber dass ein solcher
Standard nicht umgesetzt wird ist schlecht, dann muss ich meine
allgemeine PDO Schnittstelle wieder spezialisieren, dass solche Dinge
Treiberabhängig gemacht werden. Sehr ärgerlich...

Aber Danke für die Hilfe.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/