CREATE PROCEDURE ProGetColumnInfo(TableName varchar(50))
returns (TableCode VARCHAR(50),FIELDNAME VARCHAR(20),ID INT,TYPENAME VARCHAR(20),LEN INT,SCALE int, SUBTYPE INT,IsPrimary INT)
AS
begin
FOR
SELECT a.RDB$RELATION_NAME, b.RDB$FIELD_NAME ,
b.RDB$FIELD_ID , d.RDB$TYPE_NAME ,
c.RDB$FIELD_LENGTH/2 , c.RDB$FIELD_SCALE,c.RDB$FIELD_SUB_TYPE,
CASE WHEN EXISTS(select 1 FROM RDB$INDEX_SEGMENTS T1 INNER JOIN RDB$RELATION_CONSTRAINTS T2
ON T1.RDB$INDEX_NAME =T2.RDB$INDEX_NAME
WHERE T2.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
AND T2.RDB$RELATION_NAME = A.RDB$RELATION_NAME AND T1.RDB$FIELD_NAME=b.RDB$FIELD_NAME)
THEN 1 ELSE 0 END AS IsPrimary
FROM RDB$RELATIONS a
INNER JOIN RDB$RELATION_FIELDS b ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME
INNER JOIN RDB$FIELDS c ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME
INNER JOIN RDB$TYPES d ON c.RDB$FIELD_TYPE = d.RDB$TYPE
WHERE a.RDB$SYSTEM_FLAG = 0
AND d.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'
AND a.RDB$RELATION_NAME=:TableName
ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID
INTO TableCode,FIELDNAME,ID,TYPENAME,LEN,SCALE, SUBTYPE,IsPrimary
DO
BEGIN
suspend;
END
END