Pular para o conteúdo

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

#95633
burga
Participante

    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…