so vor ca. 10 Jahren habe ich im Web mal einen Select gefunden,
der mir ganz nützliche Informationen aus den System-Tabellen
liefert:
Code: Alles auswählen
SELECT r.RDB\$FIELD_NAME AS Field,
CASE f.RDB\$FIELD_TYPE
WHEN 261 THEN 'BLOB'
WHEN 14 THEN 'CHAR'
WHEN 40 THEN 'CSTRING'
WHEN 11 THEN 'D_FLOAT'
WHEN 27 THEN 'DOUBLE'
WHEN 10 THEN 'FLOAT'
WHEN 16 THEN 'INT64'
WHEN 8 THEN 'INTEGER'
WHEN 9 THEN 'QUAD'
WHEN 7 THEN 'SMALLINT'
WHEN 12 THEN 'DATE'
WHEN 13 THEN 'TIME'
WHEN 35 THEN 'TIMESTAMP'
WHEN 37 THEN 'VARCHAR'
ELSE 'UNKNOWN'
END AS Type,
f.RDB\$FIELD_LENGTH AS Length,
f.RDB\$FIELD_PRECISION AS Precision_X,
f.RDB\$FIELD_SCALE AS Scale,
f.RDB\$FIELD_SUB_TYPE AS SubType,
coll.RDB\$COLLATION_NAME AS Collation,
cset.RDB\$CHARACTER_SET_NAME AS CharSet,
MIN(rc.RDB\$CONSTRAINT_TYPE) AS Constraint_X,
MIN(i.RDB\$INDEX_NAME) AS Idx,
CASE WHEN r.RDB\$NULL_FLAG = 1 THEN 'NO' ELSE 'YES' END AS Null_X,
r.RDB\$DEFAULT_VALUE AS Default_X,
r.RDB\$FIELD_POSITION AS Pos
FROM RDB\$RELATION_FIELDS r
LEFT JOIN RDB\$FIELDS f ON r.RDB\$FIELD_SOURCE = f.RDB\$FIELD_NAME
LEFT JOIN RDB\$COLLATIONS coll ON f.RDB\$COLLATION_ID = coll.RDB\$COLLATION_ID
LEFT JOIN RDB\$CHARACTER_SETS cset ON f.RDB\$CHARACTER_SET_ID = cset.RDB\$CHARACTER_SET_ID
LEFT JOIN RDB\$INDEX_SEGMENTS s ON s.RDB\$FIELD_NAME=r.RDB\$FIELD_NAME
LEFT JOIN RDB\$INDICES i ON i.RDB\$INDEX_NAME = s.RDB\$INDEX_NAME
AND i.RDB\$RELATION_NAME=r.RDB\$RELATION_NAME
LEFT JOIN RDB\$RELATION_CONSTRAINTS rc ON rc.RDB\$INDEX_NAME = s.RDB\$INDEX_NAME
AND rc.RDB\$INDEX_NAME = i.RDB\$INDEX_NAME
AND rc.RDB\$RELATION_NAME = i.RDB\$RELATION_NAME
LEFT JOIN RDB\$REF_CONSTRAINTS refc ON rc.RDB\$CONSTRAINT_NAME = refc.RDB\$CONSTRAINT_NAME
WHERE r.RDB\$RELATION_NAME='".$_POST['_DieseTabelle']."'
GROUP BY Field,
Type,
Length,
Precision_X,
Scale,
SubType,
Collation,
CharSet,
Null_X,
Default_X,
Pos
ORDER BY Pos
Einziger Nachteil dieses Select ist, dass für die Default-Werte nicht der tatsächliche Wert ausgegeben wird,
z.B. "0", sondern ein s.g. BLR (Binary Language Representation), z.B. "0x0000194c00000005".
Hat jemand eine Idee wie man dem Select beibringen kann den tatsächlich eingetragenen Default-Wert
z.B. "0" oder "NOW" usw. auszuspucken ?
Ein weiterer Schwachpunkt ist (für mich aber von geringer Bedeutung / bitte keine große Energie reinstecken), dass gefühlt alle verfügbaren Collation pro Feld/Spalte ausgeliefert werden und nicht nur die tatsächlich eingetragene Sortierung. Auch liefert der Output keine Info darüber welche Collation von allen die eingetragene ist.
Danke und viele Grüße
Hamburgo