← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

O administrador de banco de dados do TJSE deverá criar um script em MySQL para realizar a carga de dados da TABELA A para a TABELA B, considerando que: • a TABELA A foi criada pelo script: CREATE TABLE a ( id INT AUTO_INCREMENT PRIMARY KEY, descricao VARCHAR(255) NOT NULL, custo DECIMAL(10, 2), tipo CHAR(1), CHECK (tipo IN ('A', 'B', 'C')) ); • a TABELA B foi criada pelo script: CREATE TABLE b ( id INT AUTO_INCREMENT PRIMARY KEY, descricao VARCHAR(255) NOT NULL, custo DECIMAL(10, 2) NOT NULL, tipo TINYINT, CHECK (tipo IN (1,2,3)) ); • A TABELA A foi carregada e a coluna CUSTO possui valores NULOS. O script para carregar os dados da TABELA A para a TABELA B é:

Gabarito: D

Quando voce faz carga de dados entre tabelas, o primeiro cuidado e verificar se os tipos e as restricoes da tabela de destino aceitam os valores de origem. Aqui, a TABELA B tem a coluna custo como NOT NULL e a coluna tipo como TINYINT com valores 1, 2 ou 3. Ja a TABELA A guarda tipo como CHAR(1), com 'A', 'B' e 'C', e ainda tem custo nulo em parte dos registros. Por isso, nao basta copiar tudo no piloto automatico. Se voce tentar levar custo nulo para uma coluna NOT NULL, o MySQL vai barrar a insercao. E se tentar levar 'A', 'B' e 'C' para uma coluna numerica, tambem vai dar incompatibilidade logica com a regra de negocio da tabela B. O item D resolve os dois problemas: usa COALESCE(custo, 0) para substituir valores nulos por zero, atendendo ao NOT NULL, e usa CASE para converter 'A' em 1, 'B' em 2 e 'C' em 3, respeitando o CHECK da tabela B. Em outras palavras, ele faz a traducao correta dos dados antes de inserir. Em SQL, isso e o tipo de raciocinio esperado em cargas entre tabelas com estruturas diferentes. Detalhe importante: mesmo quando o enunciado nao fala de transacao, o COMMIT ao final e adequado se o script estiver dentro de uma transacao. Em concursos, a banca gosta de testar exatamente essa atencao aos dominios de dados e a conversao de tipos, nao so o comando INSERT em si.

Continue treinando

Questões relacionadas