[firebase-br] Checar Estrutura da Tabela
Rodrigo Teodoro
teodoro_rodrigo em ig.com.br
Sex Jun 18 08:09:40 -03 2010
Isto no Firebird 2.0 ok!
CREATE OR ALTER PROCEDURE BUSCADESCRICAO (
p_tabela varchar(31))
returns (
o_reservado char(1),
o_campo varchar(31),
o_tipo varchar(31),
o_indice varchar(31),
o_tamanho integer,
o_valorpadrao varchar(31),
o_precisao integer,
o_nulabilidade varchar(1),
o_descricao varchar(255))
as
BEGIN
FOR
SELECT DISTINCT TRIM(CAMPOS.RDB$FIELD_NAME) AS CAMPO,
--TIPO DO CAMPO
TRIM(CASE
WHEN DADOSCAMPO.RDB$FIELD_PRECISION > 0 THEN 'NUMERIC'
WHEN TIPOS.RDB$TYPE_NAME = 'LONG' THEN 'INTEGER'
WHEN TIPOS.RDB$TYPE_NAME = 'SHORT' THEN 'SMALLINT'
WHEN TIPOS.RDB$TYPE_NAME = 'INT64' THEN 'NUMERIC'
WHEN TIPOS.RDB$TYPE_NAME = 'VARYING' THEN 'VARCHAR'
WHEN TIPOS.RDB$TYPE_NAME = 'TEXT' THEN 'CHAR'
WHEN TIPOS.RDB$TYPE_NAME = 'BLOB' THEN 'BLOB SUB_TYPE 1'
ELSE TIPOS.RDB$TYPE_NAME
END) AS TIPO,
TRIM(COALESCE((SELECT
C.RDB$CONSTRAINT_TYPE
FROM
RDB$RELATION_CONSTRAINTS C,
RDB$INDEX_SEGMENTS S
WHERE
C.RDB$RELATION_NAME = CAMPOS.RDB$RELATION_NAME AND
S.RDB$FIELD_NAME = CAMPOS.RDB$FIELD_NAME AND
S.RDB$INDEX_NAME = C.RDB$INDEX_NAME),'CAMPO')) AS INDICE,
--TAMANHO DO CAMPO
TRIM(CASE
WHEN DADOSCAMPO.RDB$FIELD_TYPE IN(16,8) THEN
DADOSCAMPO.RDB$FIELD_PRECISION
ELSE DADOSCAMPO.RDB$FIELD_LENGTH
END) AS TAMANHOCAMPO,
--VALOR PADRAO
TRIM(SUBSTRING(CAMPOS.RDB$DEFAULT_SOURCE FROM 8 FOR
(CHAR_LENGTH(CAMPOS.RDB$DEFAULT_SOURCE) - 7))) AS VALORPADRAO,
--PRECISAO
(DADOSCAMPO.RDB$FIELD_SCALE*-1) AS PRECISAO,
--SE O CAMPO E NULO
CASE
CAMPOS.RDB$NULL_FLAG WHEN 1 THEN 'N'
ELSE 'Y'
END AS NULABILIDADE,
--DESCRICAO
TRIM(CAMPOS.RDB$DESCRIPTION) AS DESCRICAO,
CASE WHEN TRIM(CAMPOS.RDB$FIELD_NAME) = 'DOMAIN' THEN
'S'
WHEN TRIM(CAMPOS.RDB$FIELD_NAME) = 'BLOCK' THEN
'S'
ELSE
'N'
END AS RESERVADO
FROM
RDB$RELATIONS TABELAS,
RDB$RELATION_FIELDS CAMPOS,
RDB$FIELDS DADOSCAMPO,
RDB$TYPES TIPOS
WHERE
TABELAS.RDB$RELATION_NAME = :P_TABELA AND
TIPOS.RDB$FIELD_NAME = 'RDB$FIELD_TYPE' AND
TABELAS.RDB$RELATION_NAME = CAMPOS.RDB$RELATION_NAME AND
CAMPOS.RDB$FIELD_SOURCE = DADOSCAMPO.RDB$FIELD_NAME AND
DADOSCAMPO.RDB$FIELD_TYPE = TIPOS.RDB$TYPE
ORDER BY
CAMPOS.RDB$FIELD_POSITION
INTO
:O_CAMPO,
:O_TIPO,
:O_INDICE,
:O_TAMANHO,
:O_VALORPADRAO,
:O_PRECISAO,
:O_NULABILIDADE,
:O_DESCRICAO,
:O_RESERVADO
DO BEGIN
SUSPEND;
END
END
Mais detalhes sobre a lista de discussão lista