@jobo
Danke, das wirkt (derzeit ohne Nebenwirkungen
). Ich musste nur ein paar kleine Änderungen vornehmen, da IB7.1 bzw. FB2.0 das "case" im select nicht mag und ich per Parameter
die Tabelle auswähle, die mich interessiert.
Das also hat bei mir funktioniert:
Code:
select
rel.rdb$constraint_name as foreignkey,
co1.rdb$relation_name as detailtable,
/*
case idx.rdb$segment_count
when 1 then fl1.rdb$field_name
else idx.rdb$segment_count
end as fields,
*/
fl1.rdb$field_name,
idx.rdb$segment_count,
rel.rdb$const_name_uq as primarykey,
co2.rdb$relation_name as mastertable,
fl2.rdb$field_name as masterfield
from rdb$ref_constraints rel
/* RDB$Relation_Constraints wird 2x benötigt:
als co1 für den Tabellennamen des ForeignKey
als co2 für den Tabellennamen des PrimaryKey, auf den sich der ForeignKey bezieht */
/* ebenso RDB$Index_Segments
als fl1 für den Spaltennamen des FK
als fl2 für den Spaltennamen des PK */
left outer join rdb$relation_constraints co1 on rel.rdb$constraint_name = co1.rdb$constraint_name
left outer join rdb$indices idx on rel.rdb$constraint_name = idx.rdb$index_name
left outer join rdb$relation_constraints co2 on rel.rdb$const_name_uq = co2.rdb$constraint_name
left outer join rdb$index_segments fl1 on rel.rdb$constraint_name = fl1.rdb$index_name
left outer join rdb$index_segments fl2 on rel.rdb$const_name_uq = fl2.rdb$index_name
where
(not rel.rdb$constraint_name like 'RDB$')
and
co2.rdb$relation_name = :master_table
order by rel.rdb$constraint_name