Buscar

Função para atualizar pontuação em tabela de campeonato

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 1/18
Usuário RAFAEL MOREIRA CHAVES
Curso 2103-PROGRAMAÇÃO DE BANCO DE DADOS
Teste Clique aqui para iniciar o Quiz
Iniciado 27/08/21 15:48
Enviado 20/09/21 12:24
Data de vencimento 20/09/21 23:59
Status Completada
Resultado da tentativa 5 em 10 pontos  
Tempo decorrido 572 horas, 36 minutos
Resultados exibidos Todas as respostas, Respostas enviadas, Respostas corretas, Comentários
Pergunta 1
Resposta
Selecionada:
a.
Respostas:
a.
b.
c.
Considere a seguinte sequência de comandos:
1. DELIMITER $$
2. CREATE PROCEDURE intervalo_aleatorio(IN tamanho int, OUT inicio int, OUT fim int)
3. BEGIN
4.     SET inicio = ROUND(RAND()*100);
5.     SET fim = inicio + tamanho;
6. END$$
7. DELIMITER ;
8. CALL intervalo_aleatorio(10, @ini, @fim);
9. SELECT @ini, @fim;
Sobre a sequência de comandos, é correto afirmar:
A criação da procedure retornará um erro, pois a linha 4 deveria ser:
 SELECT ROUND(RAND()*100) INTO inicio;
A criação da procedure retornará um erro, pois a linha 4 deveria ser:
 SELECT ROUND(RAND()*100) INTO inicio;
Todos os comandos serão executados com sucesso, e uma possível saída é:
+------+------+
| @ini | @fim |
+------+------+
|   46 |   56 |
+------+------+
0 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 2/18
d.
e.
Comentário
da
resposta:
O comando CALL retornará um erro, pois o nome do argumento (ini) não bate com o
nome do parâmetro (inicio).
O comando SELECT retornará um erro, pois os arrobas devem preceder os nomes
das variáveis somente na chamada do procedimento (CALL).
Todos os comandos serão executados com sucesso, e uma possível saída é:
+--------+--------+
| @ini   | @fim   |
+--------+--------+
|   0.46 |   0.56 |
+--------+--------+
A alternativa B é a correta, pois apresenta uma saída plausível para a
execução dos comandos apresentados. O procedimento intervalo_aleatorio
deve preencher a variável @ini com um valor entre 0 e 100, no caso foi 46. O
procedimento intervalo_aleatorio deve preencher a variável @fim com o valor
de @ini acrescido do valor do argumento tamanho. Ou seja, para @ini 46 e
tamanho 10 (linha 8), @fim deve ser 46 + 10 = 56.
O SELECT INTO somente é necessário quando se quer passar o resultado de um
SELECT para uma variável. Não é o caso, por isso a alternativa A está errada.
O nome do argumento não precisa bater com o nome do parâmetro. A
correspondência é feita pela posição do argumento na lista de argumentos. Por isso,
a alternativa C está errada.
Os arrobas foram adequadamente utilizados na sequência de comandos. Por isso, a
alternativa D está errada.
A expressão ROUND(RAND()*100) retorna sempre um número inteiro entre 0 e 100,
então não há como o valor de ini e fim serem fracionários. Por isso, a alternativa E
está errada.
Pergunta 2
Considere o cenário da questão 7. Um programador escreveu a seguinte função para atualizar o
campo pontuacao da tabela campeonato:
DELIMITER $$
CREATE FUNCTION atualiza_pontuacao(id_do_time int) RETURNS int deterministic 
BEGIN
    DECLARE pontuacao_como_time1, pontuacao_como_time2, pts int;
0 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 3/18
Resposta
Selecionada:
c.
Respostas: a.
b.
c.
d.
e.
    SELECT SUM(pontos_pra_time1(gols_time1, gols_time2)) INTO
pontuacao_como_time1 FROM partidas WHERE id_time1 = id_do_time;
    SELECT SUM(pontos_pra_time2(gols_time1, gols_time2)) INTO
pontuacao_como_time2 FROM partidas WHERE id_time2 = id_do_time;
    SET pts = IFNULL(pontuacao_como_time1, 0) + IFNULL(pontuacao_como_time2, 0);
    UPDATE campeonato SET pontuacao = pts WHERE id_time = id_do_time;
    RETURN pts;
END$$
DELIMITER ;
Além das tabelas partidas e campeonato, o banco de dados possui ainda a tabela times, que
contém as colunas id_time e nome.
Após cada partida, o programador invoca a função atualiza_pontuacao com o seguinte comando:
SELECT id_time, atualiza_pontuacao(id_time) as pontuacao FROM times;
Sobre os efeitos causados pelo comando acima, assinale a alternativa correta.
O comando executará com erros, pois uma função não pode alterar o estado do
banco de dados. Como o MySQL não avalia semanticamente o conteúdo de uma
função, esse erro não se manifesta no momento da criação da função.
O comando executará sem erros e causará o efeito colateral desejado. Contudo,
alguns podem considerar essa situação um tanto quanto confusa, uma vez que a
atualização é feita com o comando SELECT, que é um comando de leitura. Além
disso, a implementação quebra o princípio de que uma função deveria apenas
retornar valores, sem causar efeitos colaterais.
Não será possível executar esse comando, pois a criação da função já terá falhado,
uma vez que uma função não pode alterar o estado do banco de dados.
O comando executará com erros, pois uma função não pode alterar o estado do
banco de dados. Como o MySQL não avalia semanticamente o conteúdo de uma
função, esse erro não se manifesta no momento da criação da função.
Não será possível executar esse comando, pois a criação da função já terá falhado,
uma vez que a definição dessa função possui erros de sintaxe.
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 4/18
Comentário
da
resposta:
O comando executará sem erros, mas o efeito colateral provocado não será o
desejado. Durante a execução, o comando UPDATE será ignorado, uma vez que uma
função não pode alterar o estado do banco de dados.
Todos os comandos exibidos estão corretos e funcionarão, nenhum erro será
lançado a nenhum momento. Contudo, do ponto de vista de código limpo, essa pode
não ser a melhor solução, conforme esclarece a alternativa A.
Pergunta 3
Resposta
Selecionada:
d.
Respostas: a. 
Considere a seguinte tabela login:
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| data_hora  | datetime | YES  |     | NULL    |       |
| id_cliente | int             | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
 Considere agora o comando:
 SELECT HOUR(data_hora) as hora, id_cliente FROM login GROUP BY hora;
Qual o problema com o comando acima?
O alias hora não funciona no GROUP BY; seria preciso escrever GROUP BY
HOUR(data_hora).
Há um erro de sintaxe.
0 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 5/18
b.
c.
d.
e. 
Comentário
da
resposta:
HOUR não pode ser usada com o GROUPY BY, pois não é uma função agregadora.
A seleção da coluna id_cliente é incompatível com o agrupamento por hora, já que é
um valor que varia dentro de um mesmo grupo.
O alias hora não funciona no GROUP BY; seria preciso escrever GROUP BY
HOUR(data_hora).
Não há nenhum problema com o comando.
Em uma seleção com agrupamento, os campos selecionados devem ou fazer parte
da definição do agrupamento ou serem funções que agregam cada grupo. Não é o
caso de seleção de id_cliente. O comando produz a seguinte saída:
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY
clause and contains nonaggregated column 'brasil.login.id_cliente'which
is not functionally dependent on columns in GROUP BY clause; this is
incompatible with sql_mode=only_full_group_by
Pergunta 4
Considere as seguintes tabelas pet e 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          |
+-------+-------------+------+-----+---------+----------------+
1 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 6/18
Resposta
Selecionada:
a.
Respostas: a.
b.
c.
d.
| id    | int         | NO   | PRI | NULL    | auto_increment |
| nome  | varchar(20) | NO   | UNI | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
 
 Considere agora a seguinte sequência de comandos:
 
> insert into dono (nome) values ('Leonardo');
> insert into pet (nome) values ('Brasinha');
> GET DIAGNOSTICS CONDITION 1 @msg = MESSAGE_TEXT;
> SELECT @msg;
 
Sobre o resultado dessa sequência de comandos, considere as seguintes afirmações:
 I – Se Leonardo for um dono já existente, a variável @msg terá o valor"Duplicate entry
'Leonardo' for key 'dono.nome'".
 II – Se Brasinha for um pet já existente, a variável @msg terá o valor "Duplicate entry 'Brasinha' for
key 'pet.nome'".
 Assinale a alternativa verdadeira.
Somente a afirmação II está correta, uma vez que o comando GET DIAGNOSTICS só
recupera os detalhes do erro ocorrido na linha imediatamente anterior.
Somente a afirmação II está correta, uma vez que o comando GET DIAGNOSTICS só
recupera os detalhes do erro ocorrido na linha imediatamente anterior.
Ambas as afirmações estão incorretas, uma vez que o comando GET
DIAGNOSTICS foi utilizado sem um handler.
Somente a afirmação II está correta, uma vez que o comando GET DIAGNOSTICS só
recupera os detalhes do primeiro erro ocorrido ainda não tratado.
Ambas as afirmações estão corretas, uma vez que o comando GET
DIAGNOSTICS recupera os detalhes do último erro ocorrido. Obs.: no caso de o pet e
o dono forem repetidos, a mensagem fará menção ao último erro; no caso, o erro do
pet.
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 7/18
e.
Comentário
da resposta:
Ambas as afirmações estão incorretas, devido a erros de sintaxe nos comandos.
Somente a afirmação II está correta, pois o comando GET DIAGNOSTICSsó
recupera os detalhes do erro ocorrido na linha imediatamente anterior.
Pergunta 5
Considere os seguintes procedimentos:
 DELIMITER $$
CREATE PROCEDURE proc1(IN x int)
BEGIN
    TRUNCATE tab1;
    TRUNCATE tab2;
    TRUNCATE tab3;
     IF x > 100 THEN
       INSERT INTO tab1 (valor) VALUES (RAND());
    END IF;
    IF x > 10 THEN
       INSERT INTO tab1 (valor) VALUES (RAND());
       INSERT INTO tab2 (valor) VALUES (RAND());
    END IF;
    IF x > 0 THEN
       INSERT INTO tab2 (valor) VALUES (RAND());
    ELSE
       INSERT INTO tab3 (valor) VALUES (RAND());
    END IF;
END$$
DELIMITER ;
 DELIMITER $$
CREATE PROCEDURE proc2(IN x int)
1 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 8/18
Resposta Selecionada: a. 
Respostas: a. 
b. 
c. 
d. 
A quantidade de registros em tab1 após a execução de proc1(x) é a mesma quantidade de
registros em tab1 após a execução de proc2(x).
A quantidade de registros em tab2 após a execução de proc1(x) é a mesma quantidade de
registros em tab2 após a execução de proc2(x).
A quantidade de registros em tab3 após a execução de proc1(x) é a mesma quantidade de
registros em tab3 após a execução de proc2(x).
BEGIN
    TRUNCATE tab1;
    TRUNCATE tab2;
    TRUNCATE tab3;
     IF x > 100 THEN
INSERT INTO tab1 (valor) VALUES (RAND());
    ELSEIF x > 10 THEN
       INSERT INTO tab1 (valor) VALUES (RAND());
       INSERT INTO tab2 (valor) VALUES (RAND());
    ELSEIF x > 0 THEN
       INSERT INTO tab2 (valor) VALUES (RAND());
    ELSE
       INSERT INTO tab3 (valor) VALUES (RAND());
    END IF;
END$$
DELIMITER ;
Assinale a alternativa que contenha apenas valores de x que satisfaçam todas as seguintes
condições:
0,10,100, 101
0,10,100, 101
0, 10, 100
0, 101
0, 10
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_id… 9/18
e. 
Comentário da
resposta:
10, 100
Seguem as quantidades de registros em cada tabela após cada uma das
execuções consideradas:
call proc1(0);
tab1 – 0
tab2 – 0
tab3 – 1
call proc1(10);
tab1 – 0
tab2 – 1
tab3 – 0
call proc1(100);
tab1 – 1
tab2 – 2
tab3 – 0
call proc1(101);
tab1 – 2
tab2 – 2
tab3 – 0
call proc2(0);
tab1 – 0
tab2 – 0
tab3 – 1
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 10/18
call proc2(10);
tab1 – 0
tab2 – 1
tab3 – 0
 
call proc2(100);
tab1 – 1
tab2 – 1
tab3 – 0
 
call proc2(101);
tab1 – 1
tab2 – 0
tab3 – 0
Pergunta 6
Considere o seguinte procedimento:
DELIMITER $$
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$$
0 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 11/18
Resposta Selecionada: b. 
Respostas: a. 
b. 
c. 
d. 
e. 
Comentário
da
resposta:
Execução 1:
Execução 2:
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.
II; III.
II; IV.
II; III.
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.
Pergunta7
Considere a seguinte sequência de comandos:
1 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 12/18
Resposta Selecionada: c. 
Respostas: a. 
b. 
c. 
d. 
e. 
Comentário
da
resposta:
 
SET @chave = UNHEX(SHA2('%s', 512));
SELECT AES_DECRYPT(sigiloso, @chave) as descriptografado FROM dados;
 
Considere agora as seguintes afirmações:
 
I – A sequência de comandos realiza a desencriptação da coluna sigiloso da tabela dados;
a chave utilizada é uma chave privada, que deve ser correspondente à chave pública usada
na função AES_ENCRYPT, que criptografou os dados.
 
II – A sequência de comandos realiza a desencriptação da coluna sigiloso da tabela dados;
a chave utilizada é uma chave simétrica, que deve ser igual à chave usada na
função AES_ENCRYPT, que criptografou os dados.
 
III – SHA e AES são padrões criptográficos bem estabelecidos, utilizados mundialmente e
disponíveis em uma ampla gama de ambientes, não somente nos bancos de dados.
 
IV – O valor passado para a função SHA2, para a criação da chave, deve ser a senha do
usuário.
 
Assinale a alternativa que indica as afirmações verdadeiras.
II e III.
II, III e IV.
I e III.
II e III.
I, III e IV.
II e IV.
SHA é um padrão de função hash, que nos ajuda a gerar uma chave simétrica a par�r
de um certo segredo, que não tem relação nenhuma com a senha do usuário. Já
o AES é um padrão criptográfico de chave simétrica, o que significa que a mesma
chave u�lizada para criptografar os dados é a chave u�lizada para desencriptá-los.
Assim, as afirmações verdadeiras são a II e a III.
Pergunta 8
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
1 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 13/18
 
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 > 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;
+----------------------------+
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 14/18
Resposta
Selecionada:
c.
Respostas: a.
b.
c.
d.
e.
| 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.
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
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 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.
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 15/18
Comentário
da
resposta:
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�velcom 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 9
Considere a tabela produto criada com o seguinte comando:
 
create table produto (id int auto_increment, descricao text, preco double,
primary key (id));
 
Considere também a seguinte trigger associada à tabela produto:
 
CREATE TRIGGER audita AFTER UPDATE ON produto FOR EACH ROW
  INSERT INTO produto_auditoria (data_hora_alteracao, usuario_que_inseriu,
id_produto) VALUES
   (NOW(), CURRENT_USER(), OLD.id);
 
Por fim, considere as seguintes sequências de comandos (obs.: uma sequência pode ter
um só comando):
 
I
INSERT INTO produto (descricao, preco) VALUES ('Copo americano', 10);
 
II
DELETE FROM produto WHERE id = 1;
 
III
REPLACE INTO produto VALUES (100, 'Vaso chinês', 1000);
REPLACE INTO produto VALUES (100, 'Vaso chinês', 2000);
 
1 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 16/18
Resposta Selecionada: b. 
Respostas: a. 
b. 
c. 
d. 
e. 
Comentário
da
resposta:
IV
INSERT INTO produto VALUES (200, 'Cumbuca japonesa', 50)
ON DUPLICATE KEY UPDATE descricao = 'Cumbuca japonesa', preco=50;
INSERT INTO produto VALUES (200, 'Cumbuca japonesa', 70)
ON DUPLICATE KEY UPDATE descricao = 'Cumbuca japonesa', preco=70;
 
V
UPDATE produto SET descricao = 'Cumbuca japonesa', preco=70 WHERE id = 200;
 
Assinale a alternativa correta.
As sequências IV e V disparam a trigger.
As sequências I, II, III, IV e V disparam a trigger.
As sequências IV e V disparam a trigger.
As sequências III, IV e V disparam a trigger.
Apenas a sequência V dispara a trigger.
Nenhuma das sequências dispara a trigger.
A trigger é disparada apenas pelo comando UPDATE, o que ocorre diretamente na
sequência V e condicionalmente na sequência IV. A sequência III, apesar de efetuar
uma atualização, não dispara a trigger por não realizar um UPDATE. Portanto, a
alterna�va “b” é a correta.
Pergunta 10
Considere a seguinte tabela usuario e sua tabela de auditoriausuario_auditoria:
 
> describe usuario;
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra          |
+-------+------+------+-----+---------+----------------+
| id    | int  | NO   | PRI | NULL    | auto_increment |
| nome  | text | YES  |     | NULL    |                |
| papel | text | YES  |     | NULL    |                |
+-------+------+------+-----+---------+----------------+
 
> describe usuario_auditoria;
+----------------+----------+------+-----+---------+----------------+
| Field          | Type     | Null | Key | Default | Extra          |
+----------------+----------+------+-----+---------+----------------+
| id             | int      | NO   | PRI | NULL    | auto_increment |
| data_hora_acao | datetime | YES  |     | NULL    |                |
| usuario_acao   | text     | YES  |     | NULL    |                |
| id_usuario     | int      | YES  |     | NULL    |                |
0 em 1 pontos
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 17/18
Resposta
Selecionada:
e. 
Respostas: a.
b.
c. 
d. 
e. 
Comentário
da
resposta:
| nome_antes     | text     | YES  |     | NULL    |                |
| papel_antes    | text     | YES  |     | NULL    |                |
| nome_depois    | text     | YES  |     | NULL    |                |
| papel_depois   | text     | YES  |     | NULL    |                |
+----------------+----------+------+-----+---------+----------------+
 
Considere as seguintes versões do gatilho responsável por inserir um registro de auditoria
de inserção de usuário:
 
CREATE TRIGGER audita_insercao_v1 BEFORE INSERT ON usuario FOR EACH ROW
INSERT INTO usuario_auditoria (data_hora_acao, usuario_acao, id_usuario, nome_depois,
papel_depois) VALUES
 (NOW(),
 CURRENT_USER(),
 NEW.id,
  NEW.nome,
  NEW.papel);
 
CREATE TRIGGER audita_insercao_v2 AFTER INSERT ON usuario FOR EACH ROW
INSERT INTO usuario_auditoria (data_hora_acao, usuario_acao, id_usuario, nome_depois,
papel_depois) VALUES
 (NOW(),
 CURRENT_USER(),
 NEW.id,
  NEW.nome,
  NEW.papel);
 
Assinale a alternativa correta.
Somente a versão 1 está correta.
A versão 2 está correta, enquanto que a versão 1 sempre deixará nulos os
campos id_usuario, nome_depois e papel_depois.
A versão 2 está correta, enquanto que a versão 1 possui um problema: pode não
registrar o ID do usuário inserido.
Ambas as versões estão igualmente corretas.
Ambas as versões possuem erros de sintaxe.
Somente a versão 1 está correta.
A versão 1 possui tempo de ação BEFORE (antes), e antes da ação ainda não
há um ID gerado para o registro (caso o ID não seja especificado no
comando INSERT*). Por isso, a versão 1 pode não auditar o ID do registro
inserido.
 
20/09/2021 21:37 Revisar envio do teste: Clique aqui para iniciar o Quiz &ndash...
https://senacsp.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_20723945_1&course_id=_163573_1&content_id=_7241934_1&outcome_i… 18/18
Exemplo: insert into usuario (nome, papel) values ('joao', 'operario');
 
Já a versão 2 (AFTER) funciona corretamente.

Continue navegando