Parâmetro IN e OUT Flashcards

(41 cards)

1
Q

O que é um parâmetro IN em uma procedure PL/SQL?

A

É um parâmetro que permite passar um valor para a procedure. A procedure utiliza esse valor, mas não pode modificá-lo externamente. É como fornecer uma “cópia” do valor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Qual a finalidade de um parâmetro OUT em uma procedure PL/SQL?

A

É um parâmetro que permite à procedure retornar um valor para o programa que a chamou. A procedure modifica o valor desse parâmetro, e essa modificação é visível fora da procedure.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Como declarar um parâmetro IN em uma procedure PL/SQL?

A

nome_parametro IN tipo_dado
Exemplo: p_CNPJ IN cliente.cnpj%type

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Como declarar um parâmetro OUT em uma procedure PL/SQL?

A

nome_parametro OUT tipo_dado
Exemplo: p_CNPJ_SAIDA OUT cliente.cnpj%type

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Qual a diferença fundamental entre parâmetros IN e OUT?

A

IN passa um valor para a procedure (somente leitura dentro da procedure). OUT permite que a procedure retorne um valor modificado para o programa chamador.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Imagine uma procedure que calcula a área de um círculo. Qual parâmetro seria IN e qual seria OUT?

A

O raio do círculo seria um parâmetro IN (a procedure precisa desse valor para calcular). A área calculada seria um parâmetro OUT (a procedure retorna esse valor).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Você tem uma procedure que verifica se um cliente está ativo no sistema. Qual parâmetro seria IN e qual seria OUT?

A

O código do cliente seria um parâmetro IN (a procedure precisa desse código para buscar o cliente). Um indicador booleano (verdadeiro/falso) indicando se o cliente está ativo seria um parâmetro OUT (a procedure retorna essa informação).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Uma procedure formata um número de telefone. Qual parâmetro seria IN e qual seria OUT?

A

O número de telefone não formatado seria um parâmetro IN. O número de telefone formatado seria um parâmetro OUT.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Uma procedure calcula o desconto a ser aplicado a um produto. Quais parâmetros seriam IN e qual seria OUT?

A

O preço do produto e o código do cliente seriam parâmetros IN. O valor do desconto calculado seria um parâmetro OUT.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Uma procedure busca o nome completo de um usuário a partir do seu ID. Quais parâmetros seriam IN e qual seria OUT?

A

O ID do usuário seria um parâmetro IN. O nome completo do usuário seria um parâmetro OUT.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Qual a principal forma de uma aplicação externa interagir com uma procedure PL/SQL?

A

Através dos parâmetros definidos na procedure.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Qual o modo de passagem de parâmetro mais comum em procedures PL/SQL?

A

IN

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Qual a direção do fluxo de dados para um parâmetro IN?

A

Da aplicação externa para a procedure.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Uma aplicação externa fornece dados para a procedure. Qual parâmetro usar?

A

Parâmetro IN.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

O que acontece se você tentar modificar o valor de um parâmetro IN dentro da procedure?

A

Não é possível, pois o parâmetro IN é tratado como uma constante dentro da procedure.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

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)

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Qual é o problema de tentar atribuir um novo valor à variável p_CNPJ dentro da procedure?

A

Variáveis declaradas como IN em procedures PL/SQL são tratadas como constantes dentro da procedure. Isso significa que você não pode alterar o valor delas.

18
Q

Qual erro específico o Oracle retorna quando você tenta modificar uma variável IN?

A

O erro é PLS-00363: a expressão ‘P_CNPJ’ não pode ser usada como um destino de designação.

19
Q

Se eu preciso modificar o valor de p_CNPJ dentro da procedure, qual a solução?

A

Declare uma nova variável local dentro da procedure (na seção IS), atribua o valor de p_CNPJ a essa nova variável e, em seguida, trabalhe com a variável local.

20
Q

Qual é o propósito da variável p_CNPJ_SAIDA declarada como OUT?

A

A variável p_CNPJ_SAIDA é usada para retornar um valor da procedure para o ambiente de chamada. Ela serve como um “recipiente” para o resultado do processamento.

21
Q

Em resumo, qual é a principal diferença entre variáveis IN e OUT em procedures PL/SQL?

A

Variáveis IN são usadas para passar valores para a procedure e não podem ser modificadas dentro dela. Variáveis OUT são usadas para retornar valores da procedure e não devem ser usadas como fonte para atribuir valor.

22
Q

Qual é o papel da variável p_CNPJ declarada como IN nesta procedure?

A

p_CNPJ serve como um parâmetro de entrada. Ela recebe o valor do CNPJ a ser formatado quando a procedure é chamada. Dentro da procedure, ela é tratada como uma constante, ou seja, seu valor não pode ser alterado diretamente.

23
Q

Por que a variável local v_CNPJ é necessária nesta procedure?

A

A variável v_CNPJ é utilizada como uma cópia de p_CNPJ, permitindo que a procedure manipule e modifique o valor do CNPJ sem alterar o valor original passado como entrada. No exemplo, ela é usada para fins de demonstração, atribuindo o valor ‘0000’, mas em um cenário real, poderia ser usada para outras transformações

24
Q

Qual é o propósito da variável p_CNPJ_SAIDA declarada como OUT?

A

p_CNPJ_SAIDA é um parâmetro de saída. Ela serve para retornar o CNPJ formatado para quem chamou a procedure. O valor atribuído a p_CNPJ_SAIDA dentro da procedure estará disponível para o código que a chamou após a execução da procedure.

25
A variável p_CNPJ_SAIDA pode ser usada para fornecer um valor inicial para a formatação dentro da procedure?
Não necessariamente. Embora tecnicamente seja possível usar o valor inicial de p_CNPJ_SAIDA (se houver) dentro da procedure, a prática comum é tratá-la principalmente como um "recipiente" para o valor de retorno. A procedure geralmente sobrescreve qualquer valor inicial que p_CNPJ_SAIDA possa ter.
26
Qual seria o resultado se tentássemos usar p_CNPJ_SAIDA como a fonte para formatação, em vez de p_CNPJ?
A procedure compilaria sem erros, mas o resultado seria inesperado, pois p_CNPJ_SAIDA é destinado a receber o valor formatado, não a fornecer o valor a ser formatado. Isso provavelmente resultaria em um valor incorreto ou em branco sendo retornado.
27
O parâmetro IN pode receber um novo valor dentro da procedure?
Falso. Parâmetros IN são como constantes dentro da procedure; você pode utilizá-los, mas não pode alterar seu valor.
28
O parâmetro OUT pode receber um valor dentro da procedure?
Verdadeiro. Parâmetros OUT são designados para retornar valores da procedure. Dentro da procedure, você atribui um valor a eles.
29
O parâmetro IN pode ser atribuído a outra variável dentro da procedure?
Verdadeiro. Você pode usar o valor de um parâmetro IN para atribuir a outra variável, permitindo que você trabalhe com esse valor sem modificar o parâmetro original.
30
O parâmetro OUT pode ser atribuído a outra variável dentro da procedure?
Falso. O parâmetro OUT serve para receber um valor que será retornado.
31
Resumo sobre IN e OUT
IN: Recebe valor de fora, não pode ser modificado dentro da procedure, mas pode ser usado para atribuir valor a outras variáveis. OUT: Retorna valor, pode ser modificado dentro da procedure, mas não pode ser usado para atribuir valor a outras variáveis dentro da procedure.
32
Qual a finalidade de um parâmetro IN OUT em uma procedure PL/SQL?
Permite que o parâmetro seja usado tanto para receber um valor de entrada quanto para retornar um valor modificado após a execução da procedure. Ele atua como entrada e saída simultaneamente.
33
Em comparação com os parâmetros IN e OUT, como o IN OUT se diferencia?
IN é apenas para entrada, OUT é apenas para saída, enquanto IN OUT combina as duas funcionalidades, permitindo que a procedure receba um valor inicial e o modifique, retornando o novo valor.
34
O que acontece se você tentar usar um parâmetro OUT como se fosse um IN dentro de uma procedure?
ao tentar usar um parâmetro OUT como entrada, o resultado obtido foi um valor vazio ("/-").
35
Qual a sintaxe para declarar um parâmetro IN OUT em uma procedure PL/SQL?
nome_parametro IN OUT tipo_dado (Exemplo: p_CNPJ_SAIDA IN OUT cliente.cnpj%type)
36
Explique como o parâmetro p_CNPJ_SAIDA se comporta como IN e OUT dentro da procedure FORMATA_CNPJ_SIMPLES.
Inicialmente, p_CNPJ_SAIDA recebe o valor do CNPJ a ser formatado (entrada). Após a formatação, o novo valor formatado é atribuído a p_CNPJ_SAIDA, atualizando o valor original (saída).
37
Se uma variável v_CNPJ é passada para a procedure FORMATA_CNPJ_SIMPLES como o parâmetro p_CNPJ_SAIDA, o que acontece com o valor de v_CNPJ após a execução da procedure?
O valor de v_CNPJ será modificado para o CNPJ formatado, pois p_CNPJ_SAIDA é um parâmetro IN OUT.
38
Altere essa procedure para que possamos usar a variável p_VALOR tanto como entrada quanto como saída.
39
Crie uma procedure para formatar o CNPJ no formato identico ao 123/45-67890. Utilize o parâmetro IN OUT
40
Crie uma procedure chamado ATUALIZAR_SEGMENTO que atualiza o segmento da tabela Clientes passando o ID do cliente e o novo código de Segmento.
41
Como você executaria essa procedure para atualizar os clientes 1,2,3 e 4 para o segmento 3
EXECUTE ATUALIZAR_SEGMERCADO(1,3); EXECUTE ATUALIZAR_SEGMERCADO(2,3); EXECUTE ATUALIZAR_SEGMERCADO(3,3); EXECUTE ATUALIZAR_SEGMERCADO(4,3);