Pegar Estrutura do Banco de Dados (Firebird)

Ola;

Exite algum fonte java pronto que me desse a Estrutura do FDB de minha aplicacao ???

Preciso recuperar o SCHEMA compelto do Banco de Dados

Se alguem puder ajudar ??

Obrigado

Olá,

Para Firebird

SELECT      RRF.RDB$RELATION_NAME AS TABELA,
            RRF.RDB$FIELD_NAME AS CAMPO,
            CASE
              RTP.RDB$TYPE_NAME
                WHEN 'VARYING'  THEN  'VARCHAR'
                WHEN 'LONG'     THEN  'INTEGER'
                WHEN 'SHORT'    THEN  'SMALLINT'
                WHEN 'DOUBLE'   THEN  'DOUBLE PRECISION'
                WHEN 'FLOAT'    THEN  'DOUBLE PRECISION'
                WHEN 'INT64'    THEN  'NUMERIC'
                WHEN 'TEXT'     THEN  'CHAR'
                ELSE RTP.RDB$TYPE_NAME
            END TIPO_CAMPO,
            CASE
              RTP.RDB$TYPE_NAME
                WHEN  'VARYING' THEN RFL.RDB$FIELD_LENGTH
                ELSE  RFL.RDB$FIELD_PRECISION
            END AS TAMANHO,
            (RFL.RDB$FIELD_SCALE * -1) AS ESCALA,
            IIF(  EXISTS(   SELECT      FIRST 1 1
                            FROM        RDB$RELATION_CONSTRAINTS  RCN
                            INNER JOIN  RDB$INDEX_SEGMENTS        ISG     ON    RCN.RDB$INDEX_NAME = ISG.RDB$INDEX_NAME AND
                                                                                ISG.RDB$FIELD_NAME = RRF.RDB$FIELD_NAME
                            WHERE       RCN.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND
                                        RCN.RDB$RELATION_NAME =  RRF.RDB$RELATION_NAME),
                  'X',
                  'O')  AS  PRIMARY_KEY,
            IIF(  EXISTS(   SELECT      FIRST 1 1
                            FROM        RDB$RELATION_CONSTRAINTS  RCN
                            INNER JOIN  RDB$CHECK_CONSTRAINTS     CCN     ON    RCN.RDB$CONSTRAINT_NAME = CCN.RDB$CONSTRAINT_NAME AND
                                                                                CCN.RDB$TRIGGER_NAME = RRF.RDB$FIELD_NAME
                             WHERE      RCN.RDB$RELATION_NAME =  RRF.RDB$RELATION_NAME ),
                  'X',
                  'O')  AS  NOT_NULL,
            IIF(  RRC.RDB$RELATION_NAME IS NOT NULL, 
                  'X',
                  'O')  AS  FOREIGN_KEY,
            RFC.RDB$CONST_NAME_UQ AS  INDICE_CHAVE,
            RRC.RDB$RELATION_NAME AS  TABELA_CHAVE,
            RIS2.RDB$FIELD_NAME   AS  CAMPO_CHAVE,
            RFC.RDB$UPDATE_RULE   AS  REGRA_UPDATE,
            RFC.RDB$DELETE_RULE   AS  REGRA_DELETE
FROM        RDB$RELATION_FIELDS   RRF
INNER JOIN  RDB$FIELDS            RFL     ON    RFL.RDB$FIELD_NAME = RRF.RDB$FIELD_SOURCE
INNER JOIN  RDB$TYPES             RTP     ON    RTP.RDB$TYPE = RFL.RDB$FIELD_TYPE AND
                                                RTP.RDB$FIELD_NAME = 'RDB$FIELD_TYPE'
LEFT JOIN   RDB$INDEX_SEGMENTS    RIS     ON    RIS.RDB$FIELD_NAME = RRF.RDB$FIELD_NAME AND
                                                EXISTS (  SELECT      FIRST 1 1
                                                          FROM        RDB$INDICES   IND
                                                          INNER JOIN  RDB$REF_CONSTRAINTS   RFC   ON    RFC.RDB$CONSTRAINT_NAME = IND.RDB$INDEX_NAME
                                                          WHERE       IND.RDB$INDEX_NAME = RIS.RDB$INDEX_NAME AND
                                                                      IND.RDB$RELATION_NAME = RRF.RDB$RELATION_NAME)
LEFT JOIN   RDB$REF_CONSTRAINTS   RFC     ON    RFC.RDB$CONSTRAINT_NAME = RIS.RDB$INDEX_NAME
LEFT JOIN   RDB$INDEX_SEGMENTS    RIS2    ON    RIS2.RDB$INDEX_NAME = RFC.RDB$CONST_NAME_UQ AND
                                                RIS2.RDB$FIELD_POSITION = RIS.RDB$FIELD_POSITION
LEFT  JOIN  RDB$RELATION_CONSTRAINTS RRC  ON    RFC.RDB$CONST_NAME_UQ = RRC.RDB$CONSTRAINT_NAME AND
                                                RRC.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
WHERE       RRF.RDB$RELATION_NAME NOT STARTING WITH 'RDB$'
ORDER BY    RRF.RDB$RELATION_NAME

Para MySql

SELECT    ISC.TABLE_SCHEMA AS BANCO,
          ISC.TABLE_NAME AS TABELA,
          ISC.COLUMN_NAME AS CAMPO,
          ISC.ORDINAL_POSITION AS ORDEM,
          ISC.DATA_TYPE AS TIPO,
          CASE
            WHEN  ISC.IS_NULLABLE = 'NO' THEN  'X'
            ELSE  ''
          END AS NOT_NULL,
          ISC.CHARACTER_MAXIMUM_LENGTH AS TAMANHO_MAX_STRING,
          ISC.NUMERIC_PRECISION AS TAMANHO_DOUBLE,
          ISC.NUMERIC_SCALE AS PRECISAO_DOUBLE,
          CASE
            WHEN ISC.COLUMN_KEY = 'PRI' THEN 'X'
            ELSE ''
          END AS CHAVE_PRIMARIA,
          CASE
            WHEN ISC.COLUMN_KEY = 'UNI' THEN 'X'
            ELSE ''
          END AS 'UNIQUE',
          CASE
            WHEN ISC.COLUMN_KEY = 'MUL' THEN 'X'
            ELSE ''
          END AS INDEXADA,
          ISR.CONSTRAINT_NAME AS NOME_CHAVE_FILHA,
          ISR.REFERENCED_TABLE_NAME AS TABELA_MAE,
          ISR.UNIQUE_CONSTRAINT_NAME AS NOME_CHAVE_MAE,
          ISK.REFERENCED_COLUMN_NAME AS NOME_CAMPO_MAE
FROM      INFORMATION_SCHEMA.COLUMNS ISC
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ISK         ON   ISC.TABLE_SCHEMA = ISK.CONSTRAINT_SCHEMA   AND
                                                               ISC.TABLE_NAME = ISK.TABLE_NAME            AND
                                                               ISC.COLUMN_NAME = ISK.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS ISR  ON   ISK.CONSTRAINT_NAME = ISR.CONSTRAINT_NAME  AND
                                                               ISC.TABLE_SCHEMA = ISR.CONSTRAINT_SCHEMA   AND
                                                               ISC.TABLE_NAME = ISR.TABLE_NAME

ORDER BY  ISC.TABLE_SCHEMA, ISC.TABLE_NAME, ISC.ORDINAL_POSITION;

[/code]

Att.
Júnior Carvalho

1 curtida

Obrigado joseadolfojr