Baixe o app para aproveitar ainda mais
Prévia do material em texto
20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 1/18 Usuário RAFAEL MOREIRA CHAVES Curso 2103-PROGRAMAÇÃO DE BANCO DE DADOS Teste Clique aqui para iniciar o Quiz Iniciado 20/09/21 12:26 Enviado 20/09/21 21:33 Data de vencimento 20/09/21 23:59 Status Completada Resultado da tentativa 9 em 10 pontos Tempo decorrido 9 horas, 7 minutos Resultados exibidos Todas as respostas, Respostas enviadas, Respostas corretas, Comentários Pergunta 1 Considere as seguintes tabelas pet e dono e o procedimento cria_pet_com_dono: > describe pet; +---------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | nome | varchar(20) | NO | UNI | NULL | | | id_dono | int | YES | | NULL | | +---------+-------------+------+-----+---------+----------------+ > describe dono; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | nome | varchar(20) | NO | UNI | NULL | | +-------+-------------+------+-----+---------+----------------+ DELIMITER $$ CREATE PROCEDURE cria_pet_com_dono(IN nome_pet text, IN nome_dono text) BEGIN DECLARE id_dono int; 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 2/18 Resposta Selecionada: a. Respostas: a. b. c. DECLARE dono_ja_existe int default False; DECLARE nome_repetido CONDITION FOR 1062; DECLARE CONTINUE HANDLER FOR nome_repetido SET dono_ja_existe = True; INSERT INTO dono (nome) VALUES (nome_dono); IF dono_ja_existe THEN SELECT id INTO id_dono FROM dono WHERE nome = nome_dono; ELSE SET id_dono = LAST_INSERT_ID(); END IF; INSERT INTO pet (nome, id_dono) VALUES (nome_pet, id_dono); END$$ DELIMITER ; Esse procedimento insere um novo pet (com um nome informado ao procedimento) para um novo dono (cujo nome também é informado ao procedimento); porém, como a tabela dono não aceita nomes duplicados, o procedimento toma um cuidado caso o nome do dono informado já exista na tabela: em vez de criar um novo dono, o procedimento cria um novo pet para esse dono já existente. No entanto, o procedimento apresentado não toma nenhuma precaução para o caso de receber um nome de pet já existente. Sobre essa problemática, assinale a alternativa correta. A inserção de um pet com nome repetido a princípio dispara um erro, mas o handler nome_repetido faz com que o erro seja abafado; ou seja, se o usuário tentar inserir um pet com um nome já existente, o procedimento não vai disparar nenhum erro, mas também não vai inserir o registro de pet. A inserção de um pet com nome repetido a princípio dispara um erro, mas o handler nome_repetido faz com que o erro seja abafado; ou seja, se o usuário tentar inserir um pet com um nome já existente, o procedimento não vai disparar nenhum erro, mas também não vai inserir o registro de pet. O procedimento se chama “cria pet”, então o comportamento atual é bem razoável: caso não seja possível criar um novo pet com o nome fornecido (pois é um nome já usado), o procedimento dispara um erro. Como o handler declarado abafa a propagação do erro, o procedimento acaba inserindo pets com nomes repetidos. 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 3/18 d. e. Comentário da resposta: A inserção de um pet com nome repetido a princípio dispara um erro, mas o handler nome_repetido faz com que o erro seja abafado; ou seja, se o usuário tentar inserir um pet com um nome já existente, o procedimento não vai disparar nenhum erro, mas também não vai inserir o registro de pet. Nesse caso em que o pet não é inserido, o procedimento, de forma consistente, também nunca criará um novo dono. O handler existente garante que o procedimento não terminará em erro. Assim, caso um nome de pet repetido seja informado, o pet será atualizado, tendo seu dono alterado de acordo com o argumento nome_dono. No MySQL, o handler não é associado a uma tabela em particular, somente a um determinado tipo de erro. Com isso, o mesmo erro (violação de unicidade) ocorrido na tabela pet ativará o mesmo handler que foi projetado para lidar com a violação de unicidade na tabela dono. Como o handler é do tipo CONTINUE, temos que uma inserção que viole a unicidade, embora não seja efetiva (devido à restrição de unicidade), não vai disparar um erro para o cliente do procedimento. Note que, com o nome do pet repetido ou não, um nome inédito de dono causará a inserção de um registro de dono. Como a inserção de pet repetido não dispara erro, a eventual inserção de um dono não será revertida. Com essas considerações, temos que a alternativa correta é a “a”. Pergunta 2 Considere as seguintes situações: A – Uma aplicação web é usada por vários diplomatas para a pesquisa de comunicações diplomáticas sigilosas. Há um módulo de entrada de novas comunicações, mas a aplicação nunca exclui uma comunicação. Contudo, um discurso sumiu do banco de dados. Se não foi da aplicação, de onde veio o comando de deleção? B – Uma aplicação web é usada por escreventes para o gerenciamento de penas impostas por juízes e usada pelos juízes para consultar essas penas. A aplicação permite incluir, alterar e excluir penas. Um juiz percebeu que uma pena foi indevidamente excluída. Qual escriturário excluiu a pena? C – Uma empresa que mantém um sistema web está recebendo reclamações de que seu sistema está lento, contudo as reclamações são vagas, ninguém fala exatamente o que está lento. O que será que está lento? Considere agora os seguintes logs nativos do MySQL: I – general log. II – slow query log. 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 4/18 Resposta Selecionada: b. Respostas: a. b. c. d. e. Comentário da resposta: III – error log. IV – binary log. V – DDL log. Assinale a alternativa que relaciona os logs que melhor poderão ajudar em cada situação. A – I. B – nenhum dos logs será conclusivo. C – II. A – I. B – I. C – II. A – I. B – nenhum dos logs será conclusivo. C – II. A – nenhum dos logs ajudará. B – nenhum dos logs ajudará. C – nenhum dos logs ajudará. A – I. B – V. C – III. A – III. B – I. C – IV. A – Em caso de a aplicação não possuir funcionalidade de exclusão, é interessante verificar o usuário do banco que disparou a ação e de que host esse usuário estava agindo. Para isso, o general log pode ajudar. B – Os usuários da aplicação (escreventes, juízes) são um conceito pertencente à aplicação, sendo invisíveis para os logs do MySQL. Portanto, nenhum log do MySQL revelará o usuário responsável pela ação. C – Se o sistema está lento, uma possibilidade é que a causa seja o banco de dados. Nesse caso, o slow query log mostrará as consultas SQL mais lentas, permitindo conferir essa hipótese. Pergunta 3 Considere o seguinte procedimento: DELIMITER $$ 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont…5/18 Resposta Selecionada: e. Respostas: a. b. Execução 1: Execução 2: CREATE PROCEDURE insere_usuarios(IN quantidade int) BEGIN DECLARE i INT DEFAULT 1; WHILE i <= quantidade DO INSERT INTO usuario (nome) VALUES (CONCAT('Usuário ', i)); IF i < 10 THEN SET i = i + 1; END IF; END WHILE; END$$ DELIMITER ; Considere agora as seguintes execuções do procedimento acima: CALL insere_usuarios(9); CALL insere_usuarios(10); Considere agora as seguintes afirmações: (I) A execução 1 insere 9 registros na tabela. (II) As execuções 1 e 2 continuarão em execução para sempre ou até serem interrompidas ou até exaurirem os recursos do sistema. (III) A execução 2 continuará em execução para sempre ou até ser interrompida ou até exaurir os recursos do sistema. Isto pode ocasionar a inserção de mais de 10 registros na tabela usuário. (IV) A execução 2 continuará em execução para sempre ou até ser interrompida ou até exaurir os recursos do sistema. Nessa situação, como o fim do procedimento não é atingido, nenhum registro é de fato inserido na tabela. Assinale a alternativa que contenha todas as afirmações verdadeiras. I; III. II; IV. II; III. 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 6/18 c. d. e. Comentário da resposta: I. I; IV. I; III. A execução 1 insere exatamente 9 registros e nunca entrará em loop infinito. A execução 2 entra em loop infinito. Se for disparada fora do contexto de uma transação, cada INSERT insere um registro na tabela, e os registros vão sendo inseridos até que a execução seja interrompida ou que os recursos do sistema sejam exauridos. Pergunta 4 Resposta Selecionada: a. Respostas: a. b. c. d. e. Comentário da Considere as seguintes declarações: CREATE TRIGGER audita_insercao BEFORE INSERT ON produto FOR EACH ROW INSERT INTO produto_auditoria (data_hora_alteracao, usuario, evento, id_produto) VALUES (NOW(), CURRENT_USER(), 'INCLUSAO', NEW.id); CREATE TRIGGER audita_exclusao BEFORE DELETE ON produto FOR EACH ROW FOLLOWS audita_insercao INSERT INTO produto_auditoria (data_hora_alteracao, usuario, evento, id_produto) VALUES (NOW(), CURRENT_USER(), 'EXCLUSAO', OLD.id); Sobre a execução desses comandos, é correto dizer: Ambas as declarações funcionam, mas audita_exclusao nunca será disparada. Ambas as declarações funcionam, mas audita_exclusao nunca será disparada. Ambas as declarações funcionam, mas audita_exclusao dará erro quando disparada. Há um erro de sintaxe em audita_insercao. As palavras NEW e OLD foram usadas indevidamente. A declaração de audita_exclusao resulta em erro. 0 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 7/18 resposta: A palavra-chave FOLLOWS deve apontar para um gatilho que opere com a mesma tabela e comando (INSERT, UPDATE, DELETE) que o gatilho sendo declarado. Isso quer dizer queaudita_exclusao não pode seguir (FOLLOWS) audita_insercao, pois são gatilhos de comandos diferentes (um é INSERT e o outro éDELETE). Assim, a alternativa correta é a “e”, pois a declaração deaudita_exclusao produz o seguinte erro: ERROR 3011 (HY000): Referenced trigger 'audita_insercao' for the given ac�on �me and event type does not exist. Pergunta 5 Encoders e decoders básicos A tabela abaixo mostra diferentes caracteres com seus code points em Unicode e os bytes (usando notação hexadecimal) correspondentes em diferentes charsets (asteriscos indicam que o caractere não pode ser representado naquele charset). Note que alguns charsets possuem comprimento variável. Char Code point ascii gb2312 utf-8 A U+0041 41 41 41 á U+00E1 * A8 A2 C3 A1 气 U+6C14 * C6 F8 E6 B0 94 U+1D11E * F0 9D 84 9E 34 D8 1E DD Todos esses asteriscos deixam claro que alguns charsets, como o ASCII, não representam todos os caracteres Unicode. Os charsets UTF, contudo, são projetados para tratar de todos os code points do Unicode. gb2312 – padrão legado para codificar ideogramas de chinês simplificado. utf-8 – O charset de 8 bits mais comum na web, retrocompatível com ASCII puro (texto em ASCII puro é válido no UTF-8). (Fonte: RAMALHO, Luciano. Text versus bytes. In: Fluent Python: clear, concise, and effective programming. Sebastopol: O’Reilly Media, 2015.) Para complementar o texto anterior, Unicode é um padrão que atribui um código (code point) a cada caractere existente. Por fim, considere a seguinte sequência de comandos: 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 8/18 Resposta Selecionada: c. Respostas: a. b. 1 > CREATE TABLE tab (info blob); 2 > INSERT INTO tab (info) VALUES ('O mundo é bão Sebastião'); 3 > table tab; +---------------------------+ | info | +---------------------------+ | O mundo é bão Sebastião | +---------------------------+ 4 > SELECT CONVERT(info USING utf8) as decodificando_com_utf8 FROM tab; +----------------------------+ | decodificando_com_utf8 | +----------------------------+ | O mundo é bão Sebastião | +----------------------------+ 5 > SELECT CONVERT(info USING ascii) as decodificando_com_ascii FROM tab; +----------------------------+ | decodificando_com_ascii | +----------------------------+ | O mundo ?? b??o Sebasti??o | +----------------------------+ Considerando o texto fornecido e o estudado no capítulo 7, assinale a alternativa que melhor explica os resultados obtidos na sequência de comandos. O texto “O mundo é bom Sebas�ão” é armazenado em uma coluna do �po blob (sem charset definido). Mas, ainda assim, o charset u�lizado é o UTF-8, devido à configuração da variável de ambiente LANG. Na hora de ler a tabela sem especificar um charset (comando 3), a leitura produz um resultado legível, pois a leitura u�liza o charset padrão. A leitura u�lizando o charset UTF-8 (comando 4) produz um resultado legível. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII (comando 5), temos um resultado não totalmente legível. O texto “O mundo é bão Sebas�ão” é armazenado u�lizando o charset UTF-8 (único suportado pelo MySQL). Como os bytes foram produzidos com charset UTF- 8, a leitura u�lizando esse charset (comandos 3 e 4) produz um resultado legível. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII (comando 5), temos um resultado não totalmente legível, pois o charset UTF-8 é retrocompa�vel com ASCII puro. 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_cont… 9/18 c. d. e. Comentário da resposta: O texto “O mundo é bão Sebas�ão” é armazenado em uma coluna do �po blob (caracteres Unicode). Por isso, na hora de ler a tabela sem especificar um charset (comando 3), temos um resultado legível. Como os bytes foram produzidos com charset UTF-8, a leitura u�lizando esse charset (comando 4) produz um resultado legível. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII (comando 5), temos um resultado não totalmente legível, pois o charset UTF-8 é retrocompa�vel com ASCII puro. O texto “O mundo é bom Sebas�ão” é armazenado em uma coluna do �po blob (sem charset definido). Mas, ainda assim, o charset u�lizado é o UTF-8, devido à configuração da variável de ambiente LANG. Na hora de ler a tabela sem especificar um charset (comando 3), a leitura produz um resultado legível, pois a leiturau�liza o charset padrão. A leitura u�lizando o charset UTF-8 (comando 4) produz um resultado legível. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII (comando 5), temos um resultado não totalmente legível. O texto “O mundo é bão Sebas�ão” é armazenado em uma coluna do �po blob (sem charset), mas, ainda assim, o charset u�lizado é o ASCII, devido à configuração da variável de ambiente LANG. Como os bytes foram produzidos com charset ASCII, a leitura u�lizando esse charset (comandos 3 e 4) produz um resultado legível, uma vez que o UTF-8 é retrocompa�vel com ASCII puro. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII, temos um resultado não totalmente legível, também pelo fato de o UTF-8 ser retrocompa�vel com ASCII puro. O texto “O mundo é bão Sebas�ão” é armazenado em uma coluna do �po blob (sem charset), mas, ainda assim, o charset u�lizado é o UTF-8, devido à configuração da variável de ambiente LANG. Na hora de ler a tabela sem especificar um charset (comando 3), a leitura produz um resultado legível, pois a leitura também u�liza o charset padrão. Como os bytes foram produzidos com charset UTF-8, a leitura u�lizando esse charset (comando 4) produz um resultado legível. Por fim, ao decodificar os bytes armazenados u�lizando o charset ASCII, temos um resultado não totalmente legível devido a um erro de sintaxe no comando. Pelo texto de apoio, vemos que o charset ASCII é incapaz de lidar com textos acentuados. Portanto, é possível determinar, pelos comandos 2 e 3, que o ASCII não é o charset u�lizado na escrita nos dados. O fato de o UTF-8 ser retrocompa�vel com o ASCII significa que qualquer coisa escrita com ASCII consegue ser lida com o UTF-8, mas não é o que faz a escrita em UTF-8 não ser legível no ASCII. Pelo texto do capítulo 7, também sabemos que o MySQL é capaz de lidar com diferente charsets. Com esses raciocínios, é possível determinar a alterna�va “c” como correta em detrimento das outras. Pergunta 6 Considere as seguintes funções: CREATE FUNCTION quadrado(x int) RETURNS int deterministic RETURN x*x; CREATE FUNCTION porcentagem_aleatoria() returns char(5) deterministic return ROUND(RAND()*100); 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 10/18 Resposta Selecionada: d. Respostas: a. b. c. d. e. Comentário da resposta: Tomando as funções acima, assinale a alternativa que apresenta a correta associação entre comandos e saídas válidas para o comando associado. Comandos: (I) SELECT porcentagem_aleatoria; (II) CALL quadrado(100); (III) CALL porcentagem_aleatoria(); (IV) SELECT quadrado(100); Saídas: (A) 10000 (B) Unknown column 'porcentagem_aleatoria' IV-A; I-B. II-A; III-B. I-A; IV-B. IV-A; III-B. IV-A; I-B. II-A; I-B. O comando I produz a saída B pois está faltando o par de parênteses na chamada da função, de forma que o nome da função fica sintaticamente parecendo o nome de uma coluna. Os comandos II e III produzem o erro “PROCEDURE does not exist” pois o comando CALL serve para a invocação de procedimentos, e não de funções. O comando IV está correto e produz a saída desejada: o quadrado de 100, que é 10000. Pergunta 7 Nome Descrição AND, && “E” lógico NOT, ! Negação OR, || “OU” lógico Operadores lógicos 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 11/18 Resposta Selecionada: c. Respostas: a. b. (Traduzido da documentação oficial do MySQL. Disponível em: https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html. Acesso em: 18 out. 2020.) Classificação de triângulos O triângulo é escaleno quando as medidas dos lados são todas diferentes. O triângulo é isósceles quando possui pelo menos dois lados congruentes, ou seja, com a mesma medida. O triângulo é equilátero quando possui os três lados com as mesmas medidas. (Brasil Escola. Disponível em: https://brasilescola.uol.com.br/matematica/classificacao-de-triangulos.htm. Acesso em: 5 jan. 2021.) Considere as seguintes definições de funções e suas lacunas: CREATE FUNCTION __I__(lado1 double, lado2 double, lado3 double) RETURNS int deterministic RETURN lado1 = lado2 and lado2 = lado3; CREATE FUNCTION ___II___(lado1 double, lado2 double, lado3 double) RETURNS int deterministic RETURN lado1 = lado2 _III__ lado1 = lado3 __IV__ lado2 = lado3 __V___; CREATE FUNCTION escaleno(lado1 double, lado2 double, lado3 double) RETURNS int deterministic RETURN lado1 != lado2 and lado2 != lado3 ___VI___; Agora, considerando os textos apresentados, assinale a alternativa que preenche corretamente as lacunas. (I) equilatero (II) isosceles (III) or (IV) or (V) vazia (VI) and lado1 != lado3 (I) equilatero (II) isosceles (III) or (IV) or (V) vazia (VI) vazia (I) isosceles (II) equilatero (III) or (IV) or (V) vazia (VI) and lado1 != lado3 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 12/18 c. d. e. Comentário da resposta: (I) equilatero (II) isosceles (III) or (IV) or (V) vazia (VI) and lado1 != lado3 (I) equilatero (II) isosceles (III) or (IV) or (V) and (lado1 != lado2 or lado1 != lado3 or lado2 != lado3) (VI) and lado1 != lado3 (I) equilatero (II) isosceles (III) and (IV) and (V) and (lado1 != lado2 or lado1 != lado3 or lado2 != lado3) (VI) and lado1 != lado3 A lacuna I é equilatero, pois a função define que os três lados são iguais. A lacuna II é isosceles, pois não há alternativa válida para que a função defina um triângulo escaleno ou equilátero. A lacunas III e IV são preenchidas com or, pois o triângulo isósceles só precisa ter um par de lados iguais. A lacuna V é vazia, pois não se impõe ao triângulo isósceles que ele tenha apenas dois lados iguais. A lacuna VI é and lado1 != lado3, pois se lado1 != lado2 e lado2 != lado3, mas lado1 = lado3, o triângulo não tem todos os lados diferentes. Pergunta 8 mysql> SELECT 3/5; -> 0.60 A divisão por zero produz um resultado NULL: Operadores aritméticos: Divisão mysql> SELECT 102/(1-1); -> NULL 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 13/18 Resposta Selecionada: e. Respostas: a. Uma divisão é calculada com aritmética BIGINT apenas se realizada em um contexto em que seu resultado é convertido em um inteiro. DIV Divisão inteira. Descarta do resultado da divisão qualquer parte fracionária à direita da vírgula decimal. Se qualquer operando tiver um tipo não inteiro, os operandos serão convertidos em DECIMAL e divididos usando a aritmética DECIMAL antes de converter o resultado em BIGINT. Se o resultado exceder a faixa BIGINT, ocorrerá um erro. mysql> SELECT 5 DIV 2, -5 DIV 2, 5 DIV -2, -5 DIV -2; -> 2, -2, -2, 2 (Traduzido da documentação oficial do MySQL. Disponível em: https://dev.mysql.com/doc/refman/8.0/en/arithmetic- functions.html. Acesso em: 18 out. 2020.) Considere os seguintes comandos: (I) SELECT 42/2; (II) SELECT 42 DIV 2; (III) SELECT 43/2; (IV) SELECT 43 DIV 2; (V) SELECT 42/0; (VI) SELECT 42 DIV 0; Assinale a alternativa que traça a correspondência correta entre os comandos e as saídas. (I) 21.0000 (II) 21 (III) 21.5000 (IV) 21 (V) NULL (VI) NULL (I) 21.0000 (II) 21 (III) 21.5000 (IV) 21 (V) NULL (VI) syntaxe error 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con…14/18 b. c. d. e. Comentário da resposta: (I) 21.0000 (II) 21 (III) 21.5000 (IV) 21.5000 (V) NULL (VI) NULL (I) 21.0000 (II) 21 (III) 21.5000 (IV) 21 (V) 0 (VI) 0 (I) 21.0000 (II) syntaxe error (III) 21.5000 (IV) syntaxe error (V) NULL (VI) NULL (I) 21.0000 (II) 21 (III) 21.5000 (IV) 21 (V) NULL (VI) NULL Cada um dos comandos (I-VI) produz os seguintes resultados, com as respectivas justificativas: (I) SELECT 42/2; -- retorna 21.0, pois / é divisão fracionária (II) SELECT 42 DIV 2; -- retorna 21, pois DIV é divisão inteira (III) SELECT 43/2; -- retorna 21.5, pois / é divisão fracionária (IV) SELECT 43 DIV 2; -- retorna 21, pois DIV é divisão inteira (V) SELECT 42/0; -- divisão por zero retorna NULL (VI) SELECT 42 DIV 0; -- divisão por zero retorna NULL Pergunta 9 Considere as seguintes sequências de comandos. Sequência 1: 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 15/18 TRUNCATE pet; TRUNCATE dono; DROP procedure novo_pet_para_dono; INSERT INTO dono(nome) VALUES ('nome_dono'); DELIMITER $$ CREATE PROCEDURE novo_pet_para_dono(IN nome_dono text) BEGIN DECLARE nome_pet text; DECLARE id_dono int; SET nome_pet = CONCAT('Pet ', ROUND(RAND()*100)); SELECT id INTO id_dono FROM dono WHERE nome = nome_dono; IF id_dono is not NULL THEN INSERT INTO pet (nome, id_dono) VALUES (nome_pet, id_dono); END IF; END$$ DELIMITER ; SELECT COUNT(*) FROM pet; Sequência 2: TRUNCATE pet; TRUNCATE dono; DROP procedure novo_pet_para_dono; DELIMITER $$ CREATE PROCEDURE novo_pet_para_dono(IN nome_dono text) BEGIN DECLARE nome_pet text; DECLARE id_dono int; SET nome_pet = CONCAT('Pet ', ROUND(RAND()*100)); 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 16/18 Resposta Selecionada: e. Respostas: a. b. c. d. e. Comentário da resposta: SELECT id INTO id_dono FROM dono WHERE nome = nome_dono; IF id_dono is not NULL THEN INSERT INTO pet (nome, id_dono) VALUES (nome_pet, id_dono); END IF; END$$ DELIMITER ; CALL novo_pet_para_dono('nome_dono'); SELECT COUNT(*) FROM pet; Assinale a alternativa que apresenta corretamente a saída do último comando de cada sequência. Sequência 1 – 0. Sequência 2 – 0. Sequência 1 – erro de sintaxe. Sequência 2 – 0. Sequência 1 – 1. Sequência 2 – 1. Sequência 1 – 0. Sequência 2 – 1. Sequência 1 – 1. Sequência 2 – 0. Sequência 1 – 0. Sequência 2 – 0. Como o IF é avaliado somente quando da execução do procedimento, e não de sua declaração, a sequência 1 acaba não inserindo nenhum registro, pois nem sequer invoca o procedimento. Já a sequência 2 não insere nenhum registro, pois quando o procedimento é invocado não existe registro com nome “nome_dono” na tabela dono. 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 17/18 Pergunta 10 Resposta Selecionada: d. Respostas: a. b. c. d. Considere o seguinte procedimento: DELIMITER $$ CREATE PROCEDURE cria_um_pet_para_cada_dono_ja_existente() BEGIN DECLARE id_do_dono int; DECLARE done int default false; DECLARE cursor_dono CURSOR FOR SELECT id FROM dono; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_dono; FETCH cursor_dono INTO id_do_dono; WHILE not done DO INSERT INTO pet (nome, id_dono) VALUES (CONCAT('Pet ', id_do_dono), id_do_dono); FETCH cursor_dono INTO id_do_dono; END WHILE; CLOSE cursor_dono; END$$ DELIMITER ; Assinale a alternativa que apresente o comando (ou a sequência de comandos) cujos efeitos são equivalentes (em termos de dados inseridos na tabela pet) à execução do procedimento. INSERT INTO pet (nome, id_dono) SELECT CONCAT('Pet ', id), id FROM dono; INSERT INTO pet (nome, id_dono) VALUES SELECT CONCAT('Pet ', id), id FROM dono; INSERT INTO pet (nome, id_dono) VALUES CONCAT('Pet ', id), id FROM dono; SELECT CONCAT('Pet ', id), id INTO @valores FROM dono; INSERT INTO pet (nome, id_dono) VALUES @valores; INSERT INTO pet (nome, id_dono) SELECT CONCAT('Pet ', id), id FROM dono; 1 em 1 pontos 20/09/2021 21:35 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash... https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_21138075_1&course_id=_163573_1&content_id=_7241934_1&return_con… 18/18 Segunda-feira, 20 de Setembro de 2021 21h34min47s BRT e. Comentário da resposta: INSERT INTO pet (nome, id_dono) SELECT 'Pet ' + id, id FROM dono; Além de executar corretamente, a alternativa “d” é a única que produz uma execução bem-sucedida. As outras alternativas possuem problemas de sintaxe.
Compartilhar