› Fóruns › Banco de dados Oracle › Dúvida sobre variáveis de substituição em PL/SQL › Dúvida sobre variáveis de substituição em PL/SQL
Respondendo a sua pergunta:
Não deu certo pelo mesmo motivo anterior. Variável de substituição é como se fosse uma variável “especial” pois ela não tem um tipo específico…
Se você não colocar ela entre aspas simples, pro programa ou comando considerá-la uma string, o que você informar que não for número não será feito nenhuma conversão implícita de dados, e o comando contendo a variável poderá considerar o valor dado como sendo nome de coluna, nome de tabela, etc… Exemplo:
select &coluna from &tabela;
Então, dado o seu código:
sal NUMBER (7,2) := NVL(&sa,1000);
bon NUMBER (6,2) := NVL(&bo,100);
Se você não informar nenhum valor, o comando após a substituição se transforma em:
sal NUMBER (7,2) := NVL(,1000);
bon NUMBER (6,2) := NVL(,100);
Ou seja, você está passando NADA como um dos parâmetros da NVL e não NULL. Quando você coloca a variável entre aspas simples, como eu fiz no código anterior, ele fica:
sal NUMBER (7,2) := NVL('',1000);
bon NUMBER (6,2) := NVL('',100);
Sendo que ” é uma string vazia, que é um valor NULO, por isto dessa forma funciona, mas daria erro se você passasse NULL como valor da variável, enquanto que nos códigos que você postou daria certo. É aí que começam os tratamentos de dados…