O que é um parâmetro IN em PL/SQL?
Um parâmetro IN é usado para passar um valor para uma procedure. A procedure não pode modificar o valor original da variável que foi passada como parâmetro.
O que é um parâmetro OUT em PL/SQL?
Um parâmetro OUT é usado para retornar um valor de uma procedure. A procedure pode modificar o valor da variável que foi passada como parâmetro, e essa modificação é visível fora da procedure.
Qual a diferença entre passagem de parâmetro por valor e por referência, e como isso se relaciona com IN e OUT em PL/SQL?
Passagem por valor (parâmetro IN) significa que uma cópia do valor é passada para a procedure. Passagem por referência (parâmetro OUT) significa que a procedure pode acessar e modificar diretamente a variável original.
Em que situação você usaria um parâmetro OUT em uma procedure PL/SQL?
Quando você precisa que a procedure retorne um valor modificado ou calculado para o programa que a chamou.
Qual o propósito da procedure FORMATA_CNPJ?
Formatar um número de CNPJ não formatado, adicionando os caracteres de formatação (como / e -).
Para onde vai o resultado da formatação do CNPJ?
O resultado é atribuído ao parâmetro p_CNPJ_SAIDA, que é um parâmetro OUT e, portanto, retorna o valor formatado para quem chamou a procedure.
Qual é o modo do parâmetro p_CNPJ e o que isso significa?
O modo é IN, o que significa que ele é um parâmetro de entrada. A procedure recebe o valor de p_CNPJ, mas não pode modificar a variável original que foi passada para a procedure.
Qual é o modo do parâmetro p_CNPJ_SAIDA e o que isso significa?
O modo é OUT, o que significa que ele é um parâmetro de saída. A procedure atribui um valor a p_CNPJ_SAIDA, e esse valor é retornado para o programa que chamou a procedure.
Por que p_CNPJ é um parâmetro IN?
Porque a procedure precisa receber o CNPJ não formatado para poder trabalhar com ele, mas não precisa alterar o valor original do CNPJ.
Por que p_CNPJ_SAIDA é um parâmetro OUT?
Porque a procedure precisa retornar o CNPJ formatado para o programa que a chamou. O resultado da formatação é atribuído a este parâmetro.
O que aconteceria se p_CNPJ fosse declarado como OUT?
Não faria sentido, pois o objetivo é receber o CNPJ para formatação, não retornar um valor modificado para o CNPJ original.
O que aconteceria se p_CNPJ_SAIDA fosse declarado como IN?
A procedure não conseguiria retornar o CNPJ formatado para o programa que a chamou, pois parâmetros IN não permitem que a procedure modifique o valor da variável original.
Dentro da procedure, o valor de p_CNPJ pode ser alterado?
Não, porque p_CNPJ é um parâmetro IN, e parâmetros IN são tratados como constantes dentro da procedure.
O valor de p_CNPJ_SAIDA é definido antes de chamar a procedure?
Não necessariamente. O valor de p_CNPJ_SAIDA é definido dentro da procedure e retornado ao programa que a chamou.
A maneira das aplicações externas se comunicarem com as procedures é através dos parâmetros, e os parâmetros com o modo de passagem IN são os mais utilizados.
Qual característica do parâmetro IN, abaixo, que é verdadeira?
É o modo de passagem padrão.
Se omitirmos o tipo de parâmetro (IN ou OUT), o padrão será IN.
Crie uma procedure que, dado um identificador da venda (ID ), da tabela PRODUTO_VENDA_EXERCICIO, temos como retorno o valor financeiro do imposto. O parâmetro referente ao resultado do imposto deve ser passado para essa procedure como um parâmetro OUT.
A fórmula do imposto será:
(PRECO * QUANTIDADE)*(PERCENTUAL_IMPOSTO/100)
Qual o comportamento de uma variável IN dentro de uma procedure PL/SQL?
Uma variável IN serve como fonte de dados e não pode ser modificada dentro da procedure.
O que acontece se você tentar modificar uma variável IN dentro de uma procedure PL/SQL?
Ocorre um erro de compilação, indicando que a variável IN não pode ser usada como destino de atribuição.
Uma variável OUT pode ser usada como fonte de dados dentro da procedure?
Não, uma variável OUT não pode ser usada como fonte de dados para atribuir valor a si mesma.
Qual a forma correta de criar uma procedure PL/SQL em relação aos parâmetros IN e OUT?
Utilize variáveis IN para receber os dados de entrada e variáveis OUT para retornar os resultados.
O que acontece quando a linha p_CNPJ := ‘0000’; é executada?
Ocorre um erro de compilação, pois não é permitido atribuir um novo valor ao parâmetro de entrada p_CNPJ dentro da procedure.
Como consertar esse comando para que ele rode corretamente
Qual é o problema desta procedure em relação ao uso do parâmetro p_CNPJ_SAIDA?
A procedure tenta usar o parâmetro de saída p_CNPJ_SAIDA como entrada para a função SUBSTR, o que não é permitido. Variáveis OUT não podem ser usadas como fonte de dados.
Por que esta procedure, apesar de compilar, não funciona corretamente?
Porque a variável OUT não pode ser usada como fonte para atribuir valor. Ela apenas recebe o valor resultante do processamento. Na prática, a variável entra vazia na procedure.