Publicado por: Gustavo Henrique | Julho 1, 2009

Firebird, verificando se um campo dentro da base de dados varchar está em branco ou nulo…

Neste caso precisei verificar em apenas uma tabela que é a pessoa, vc pode adaptar conforme a necessidade, essa consulta nos ajudou muito pois realizamos uma importação de milhares de registros e estes após a importação deveriam ser corrigidos

o interessante é a consulta passando pelas tabelas

RDB$RELATIONS TABELAS,

RDB$RELATION_FIELDS CAMPOS,

RDB$FIELDS DADOSCAMPO,

RDB$TYPES TIPOS

 
CREATE PROCEDURE SP_PESSOA_INCONSISTENCIA
RETURNS (
    OPQTD INTEGER,
    OPQTDFINAL INTEGER,
    OPTABELA VARCHAR(100),
    OPCAMPO VARCHAR(100))
AS
DECLARE VARIABLE VTABELA VARCHAR(100);
DECLARE VARIABLE VCAMPO VARCHAR(100);
DECLARE VARIABLE STRINGSQL VARCHAR(1000);
begin
  OPQTD = 0;
  OPQTDFINAL = 0;
  FOR
   SELECT CAMPOS.RDB$RELATION_NAME, CAMPOS.RDB$FIELD_NAME
    FROM RDB$RELATIONS TABELAS, RDB$RELATION_FIELDS CAMPOS, RDB$FIELDS DADOSCAMPO, RDB$TYPES TIPOS
    WHERE 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 AND TIPOS.RDB$FIELD_NAME = ‘RDB$FIELD_TYPE’ AND
         TIPOS.RDB$TYPE_NAME = ‘VARYING’ AND TABELAS.RDB$SYSTEM_FLAG = 0
         AND CAMPOS.RDB$RELATION_NAME = ‘PESSOA’
    ORDER BY CAMPOS.RDB$RELATION_NAME, CAMPOS.RDB$FIELD_NAME
    INTO :VTABELA, :VCAMPO
  DO
  BEGIN
    STRINGSQL = ”;
    STRINGSQL = ‘ SELECT COUNT(*) FROM ‘ || lTRIM(rtrim(VTABELA));
    STRINGSQL = STRINGSQL || ‘ WHERE ( ‘ || lTRIM(rtrim(VCAMPO)) || ‘ LIKE ”” OR ‘ || lTRIM(rtrim(VCAMPO)) ||  ‘ IS NULL )’;
    EXECUTE STATEMENT STRINGSQL INTO :OPQTD;
    OPQTDFINAL =  OPQTDFINAL + OPQTD;
    OPTABELA = LTRIM(RTRIM(VTABELA));
    OPCAMPO = LTRIM(RTRIM(VCAMPO));
    SUSPEND;
  END
end


Deixe uma resposta

Sua resposta:

Categorias