A expressão IS NULL é utilizada para avaliar se o conteúdo de uma variável ou resultado de alguma operação ou retorno de função é NULO.
Esta mesma expressão também pode ser utilizada como IS NOT NULL.
IMPORTANTE
Um conteúdo NULL não é um conteúdo em branco mas sim um conteúdo NULO, onde é caracterizado por ser do tipo CHAR ou VARCHAR com tamanho de zero caracteres, ou seja, vazio.
Em resumo, "não é possível comparar um valor com conteúdo NULL com outro valor de conteúdo também NULL", muito menos um valor de conteúdo NULL com outro valor qualquer diferente de NULL usando operadores comuns como =, >=, <=, <>, !=. Neste caso é preciso sempre utilizar a expressão IS NULL ou IS NOT NULL conforme a sintaxe abaixo.
Sintaxe
|
Parâmetros
Nome | Tipo | Descrição |
---|---|---|
VALUE | Qualquer tipo 4GL | Nome da variável, função ou valor fixo que deve ser avaliado se seu conteúdo é NULO ou não. |
Observações
- Uma variável do tipo caractere (CHAR ou VARCHAR) onde seu conteúdo tenha um ou mais caracteres preenchidos ou no mínimo UM espaço em branco já é considerado NÃO NULO. Já se o conteúdo for vazio de tamanho zero, onde length(<var>) = 0, indica que seu conteúdo É NULO (IS NULL).
- Uma variável do tipo numérica, por exemplo SMALLINT, quando recebe um conteúdo inválido que não é numérico, assume automaticamente o valor NULL, ou seja LET variavelnumerica = " " irá gerar conteúdo NULL na variável.
- ATENÇÃO PARA ESTE CASO! Uma variável caractere que tenha o valor atual em branco como conteúdo, ou seja, um ou mais espaços em branco, quando for utilizada com uma expressão variavel CLIPPED, irá automaticamente retornar um conteúdo NULL, pois a diretiva CLIPPED tem como objetivo eliminar todos os espaços em branco existentes no final do conteúdo de um valor tipo CHAR ou VARCHAR, gerando neste caso um conteúdo vazio com tamanho 0 (zero), caracterizando o valor como NULL.
MAIN DEFINE txt1 CHAR(10) DEFINE txt2 CHAR(10) #-------------------------------------------------------------------------------------------------------- #atribuição de conteúdo em branco (1 espaço em branco) LET txt1 = " " #atribuição de conteúdo em branco (3 espaços em branco) LET txt2 = " " IF txt1 IS NULL THEN #este caso é FALSE CALL conout('SEM CONOUT FALSE') END IF IF txt1 IS NOT NULL THEN #este caso é TRUE CALL conout('COM CONOUT TRUE') END IF IF txt1 = " " THEN #este caso é TRUE Pois a comparação é com " " (contendo espaço em branco) CALL conout('COM CONOUT TRUE') END IF IF txt1 = txt2 THEN #este caso é TRUE pois ambos conteúdos não são NULL e são iguais (em branco) CALL conout('COM CONOUT TRUE') END IF #-------------------------------------------------------------------------------------------------------- #transforma conteúdo branco em NULL com aplicação de diretiva CLIPPED LET txt1 = txt1 CLIPPED IF txt1 = "" THEN #este caso é FALSE pois a comparação é com "" (sem espaços que corresponde a valor NULL, no entanto a comparação de valor NULL só é possível usando a expressão IS NULL ou IS NOT NULL CALL conout('SEM CONOUT FALSE') END IF IF txt1 = NULL THEN #este caso é FALSE pois a diretiva NULL só pode ser feita usando a expressão IS NULL or IS NOT NULL. CALL conout('SEM CONOUT FALSE') END IF IF txt1 IS NULL THEN #este caso é TRUE pois usa corretamente a expressão IS NULL CALL conout('COM CONOUT TRUE') END IF IF txt1 IS NULL THEN #este caso é TRUE pois usa corretamente a expressão IS NULL CALL conout('COM CONOUT TRUE') END IF #-------------------------------------------------------------------------------------------------------- #Atribuição de conteúdo NULL (nenhum espaço em branco) LET txt1 = "" #Atribuição de conteúdo NULL LET txt2 = NULL IF txt1 IS NULL THEN #este caso é TRUE CALL conout('COM CONOUT TRUE') END IF IF txt1 = txt2 THEN #este caso é FALSE (comparação com um OU ambos valores NULL) CALL conout('SEM CONOUT FALSE') END IF IF txt1 IS NULL AND txt2 IS NULL THEN #este caso é TRUE (comparação ambos valores NULL) CALL conout('COM CONOUT TRUE') END IF END MAIN