Hi,
ich habe mir eine Procedure geschrieben, welche die tabellen und Anzahl der Datensätze liefert.
Sicher nicht genau das, was du brauchst. Aber vielleicht hilft es ja:
Code:
create or alter procedure sys$to_delete (
table_name varchar(31),
id integer)
returns (
relation_name varchar(31),
anzahl integer,
can_delete char(1))
as
declare variable field_name varchar(31);
begin
/*
-> zum Anzeigen vor dem Löschen
Alle abhängigen Tabellennamen mit Anzahl der Datensätze
welche mit gelöscht werden, wenn Record mit ID :id der Tabelle :table_name
gelöscht wird
*/
for select
A.RDB$RELATION_NAME
, E.RDB$FIELD_NAME
, case
when B.RDB$DELETE_RULE = 'CASCADE' then
'T'
else
'F'
end
from RDB$REF_CONSTRAINTS B, RDB$RELATION_CONSTRAINTS A, RDB$RELATION_CONSTRAINTS C,
RDB$INDEX_SEGMENTS D, RDB$INDEX_SEGMENTS E
where (A.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY') and
(A.RDB$CONSTRAINT_NAME = B.RDB$CONSTRAINT_NAME) and
(B.RDB$CONST_NAME_UQ=C.RDB$CONSTRAINT_NAME) and
(C.RDB$INDEX_NAME=D.RDB$INDEX_NAME) and
(A.RDB$INDEX_NAME=E.RDB$INDEX_NAME) and
(C.RDB$RELATION_NAME = :table_name) and
(B.RDB$DELETE_RULE in ('CASCADE', 'RESTRICT'))
into
:relation_name
, :field_name
, :can_delete do
begin
execute statement 'select count(*) from '||:relation_name||' where '||:field_name||
'='||:id
into :anzahl;
suspend;
end
end
In diesem Fall übergebe ich den Tabellennamen und den PK (ID).
Frank