Não inicializar variáveis com ' ', utilizar sempre NULL
De DTI Wiki
OBRIGATÓRIO
Quando for necessário inicializar uma variável “em branco”, é mais legível a utilização de NULL, além de evitar problemas com campos do tipo CHAR. Uma variável CHAR(2), por exemplo, terá valores diferentes quando inicializada com e com NULL, se for inicializada com ela conterá 2 espaços em branco, e com NULL ela será realmente nula. Vale lembrar também que nunca devemos comparar nada com NULL utilizando = ou <> (= NULL ou <> NULL) porque a comparação não será feita e não haverá erro, a forma correta é utilizando IS (IS NULL ou IS NOT NULL);
COMO NÃO FAZER
v_char := ''; v_varchar := ''; v_numeric := '';
v_char := NULL; v_varchar := NULL; v_numeric := NULL;
Exemplo;
DECLARE v_char CHAR(10); v_varchar VARCHAR2(10); v_numeric NUMERIC(5, 0); BEGIN DBMS_OUTPUT.put_line('Variáveis inicializadas com '''''); v_char := ''; v_varchar := ''; v_numeric := ''; DBMS_OUTPUT.put_line('Testes com igual (=) a NULL'); IF v_char = NULL THEN DBMS_OUTPUT.put_line('v_char é nula'); ELSE DBMS_OUTPUT.put_line('v_char não é nula'); END IF; IF v_varchar = NULL THEN DBMS_OUTPUT.put_line('v_varchar é nula'); ELSE DBMS_OUTPUT.put_line('v_varchar não é nula'); END IF; IF v_numeric = NULL THEN DBMS_OUTPUT.put_line('v_numeric é nula'); ELSE DBMS_OUTPUT.put_line('v_numeric não é nula'); END IF; DBMS_OUTPUT.put_line('Testes com IS NULL'); IF v_char IS NULL THEN DBMS_OUTPUT.put_line('v_char é nula'); ELSE DBMS_OUTPUT.put_line('v_char não é nula'); END IF; IF v_varchar IS NULL THEN DBMS_OUTPUT.put_line('v_varchar é nula'); ELSE DBMS_OUTPUT.put_line('v_varchar não é nula'); END IF; IF v_numeric IS NULL THEN DBMS_OUTPUT.put_line('v_numeric é nula'); ELSE DBMS_OUTPUT.put_line('v_numeric não é nula'); END IF; DBMS_OUTPUT.put_line('Variáveis inicializadas com NULL'); v_char := NULL; v_varchar := NULL; v_numeric := NULL; DBMS_OUTPUT.put_line('Testes com igual (=) a NULL'); IF v_char = NULL THEN DBMS_OUTPUT.put_line('v_char é nula'); ELSE DBMS_OUTPUT.put_line('v_char não é nula'); END IF; IF v_varchar = NULL THEN DBMS_OUTPUT.put_line('v_varchar é nula'); ELSE DBMS_OUTPUT.put_line('v_varchar não é nula'); END IF; IF v_numeric = NULL THEN DBMS_OUTPUT.put_line('v_numeric é nula'); ELSE DBMS_OUTPUT.put_line('v_numeric não é nula'); END IF; DBMS_OUTPUT.put_line('Testes com IS NULL'); IF v_char IS NULL THEN DBMS_OUTPUT.put_line('v_char é nula'); ELSE DBMS_OUTPUT.put_line('v_char não é nula'); END IF; IF v_varchar IS NULL THEN DBMS_OUTPUT.put_line('v_varchar é nula'); ELSE DBMS_OUTPUT.put_line('v_varchar não é nula'); END IF; IF v_numeric IS NULL THEN DBMS_OUTPUT.put_line('v_numeric é nula'); ELSE DBMS_OUTPUT.put_line('v_numeric não é nula'); END IF; DBMS_OUTPUT.put_line('Fim'); END;
Resultado;
Variáveis inicializadas com
Testes com igual (=) a NULL
v_char não é nula
v_varchar não é nulav
v_numeric não é nula
Testes com IS NULL
v_char não é nula
v_varchar é nula
v_numeric é nula
Variáveis inicializadas com NULL
Testes com igual (=) a NULL
v_char não é nula
v_varchar não é nula
v_numeric não é nula
Testes com IS NULL
v_char é nula
v_varchar é nula
v_numeric é nula
Fim