- Este tópico contém 8 respostas, 2 vozes e foi atualizado pela última vez 3 anos, 3 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
20 de agosto de 2021 às 5:18 pm #149109feynoordyParticipante
precisava de ajuda com 4 perguntas da faculdade sera que alguem pode me ajudar?
20 de agosto de 2021 às 5:21 pm #149110feynoordyParticipante- Considerando a tabela “PESSOA”, crie uma Procedure PL/SQL que receba o parâmetro “ID” da “PESSOA” e atualize o campo “DELETED_ON” com a data de hoje para todos os registros que tenham “STATUS” = “INATIVO”.
- Descreva com suas palavras qual ação a Trigger abaixo irá executar:
Esse gatilho serve para obter informações da linha que esta sento inserida na tabela, podendo ser atualizada.
CREATE TRIGGER pessoa_trg
AFTER INSERT OR UPDATE ON pessoa
FOR EACH ROW
BEGIN DECLARE v_count INTEGER;
BEGIN
IF inserting THEN
INSERT INTO pessoa_log (id, created_at)
VALUES (:NEW.ID,SYSDATE);
ELSIF updating THEN
UPDATE pessoa_log
SET updated_at = SYSDATE
WHERE ID = :NEW.id;
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
20 de agosto de 2021 às 5:22 pm #149111feynoordyParticipante- Crie uma view que retorne todos os endereços da “PESSOA”. A view deverá ter os seguintes campos: Nome da Pessoa, tipo do endereço e endereço concatenado da seguinte forma: logradouro, número – cidade. Exemplo: “RUA DA ASSEMBLEIA, 10 – RIO DE JANEIRO”.
- Crie um bloco PL/SQL capaz de identificar todas as “PESSOAS” sem endereço cadastrado na tabela “ENDERECO” e faça um “insert” na tabela “ENDERECO” com o dado comercial: AV. REPÚBLICA DO CHILE, 230 – RIO DE JANEIRO. Ao realizar o “insert” tratar possíveis erros com um EXCEPTION retornando o erro gerado pelo banco de dados. O programa deve imprimir ao final a quantidade de registros afetados.
20 de agosto de 2021 às 5:22 pm #149112feynoordyParticipante- Crie uma view que retorne todos os endereços da “PESSOA”. A view deverá ter os seguintes campos: Nome da Pessoa, tipo do endereço e endereço concatenado da seguinte forma: logradouro, número – cidade. Exemplo: “RUA DA ASSEMBLEIA, 10 – RIO DE JANEIRO”.
- Crie um bloco PL/SQL capaz de identificar todas as “PESSOAS” sem endereço cadastrado na tabela “ENDERECO” e faça um “insert” na tabela “ENDERECO” com o dado comercial: AV. REPÚBLICA DO CHILE, 230 – RIO DE JANEIRO. Ao realizar o “insert” tratar possíveis erros com um EXCEPTION retornando o erro gerado pelo banco de dados. O programa deve imprimir ao final a quantidade de registros afetados.
20 de agosto de 2021 às 5:22 pm #149113feynoordyParticipante<table width=”580″>
<tbody>
<tr>
<td colspan=”6″ width=”580″>PESSOA</td>
</tr>
<tr>
<td width=”90″>ID</td>
<td width=”95″>NAME</td>
<td width=”92″>AGE</td>
<td width=”94″>STATUS</td>
<td width=”103″>CREATED_AT</td>
<td width=”105″>DELETED_ON</td>
</tr>
<tr>
<td width=”90″>1</td>
<td width=”95″>JOSE</td>
<td width=”92″>60</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2017/11/01</td>
<td width=”105″> </td>
</tr>
<tr>
<td width=”90″>2</td>
<td width=”95″>MARIA</td>
<td width=”92″>56</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2014/09/11</td>
<td width=”105″>2014/09/12</td>
</tr>
<tr>
<td width=”90″>3</td>
<td width=”95″>TEREZA</td>
<td width=”92″>80</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2018/03/04</td>
<td width=”105″>2018/04/04</td>
</tr>
<tr>
<td width=”90″>4</td>
<td width=”95″>JOAQUIM</td>
<td width=”92″>67</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2016/12/25</td>
<td width=”105″> </td>
</tr>
<tr>
<td width=”90″>5</td>
<td width=”95″>PEDRO</td>
<td width=”92″>38</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2019/01/01</td>
<td width=”105″> </td>
</tr>
<tr>
<td width=”90″>6</td>
<td width=”95″>KATRINA</td>
<td width=”92″>19</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2019/05/12</td>
<td width=”105″>2019/06/12</td>
</tr>
</tbody>
</table>20 de agosto de 2021 às 5:23 pm #149114feynoordyParticipante<table style=”height: 245px;” width=”449″>
<tbody>
<tr>
<td colspan=”6″ width=”580″>PESSOA
ID NAME AGE STATUS CREATED_AT DELETED_ON
1 JOSE 60 ATIVO 2017/11/012 MARIA 56 INATIVO 2014/09/11 2014/09/12
3 TEREZA 80 INATIVO 2018/03/04 2018/04/04
4 JOAQUIM 67 ATIVO 2016/12/255 PEDRO 38 ATIVO 2019/01/01
6 KATRINA 19 INATIVO 2019/05/12 2019/06/12
ESSOA</td>
</tr>
<tr>
<td width=”90″>ID</td>
<td width=”95″>NAME</td>
<td width=”92″>AGE</td>
<td width=”94″>STATUS</td>
<td width=”103″>CREATED_AT</td>
<td width=”105″>DELETED_ON</td>
</tr>
<tr>
<td width=”90″>1</td>
<td width=”95″>JOSE</td>
<td width=”92″>60</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2017/11/01</td>
<td width=”105″></td>
</tr>
<tr>
<td width=”90″>2</td>
<td width=”95″>MARIA</td>
<td width=”92″>56</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2014/09/11</td>
<td width=”105″>2014/09/12</td>
</tr>
<tr>
<td width=”90″>3</td>
<td width=”95″>TEREZA</td>
<td width=”92″>80</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2018/03/04</td>
<td width=”105″>2018/04/04</td>
</tr>
<tr>
<td width=”90″>4</td>
<td width=”95″>JOAQUIM</td>
<td width=”92″>67</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2016/12/25</td>
<td width=”105″></td>
</tr>
<tr>
<td width=”90″>5</td>
<td width=”95″>PEDRO</td>
<td width=”92″>38</td>
<td width=”94″>ATIVO</td>
<td width=”103″>2019/01/01</td>
<td width=”105″></td>
</tr>
<tr>
<td width=”90″>6</td>
<td width=”95″>KATRINA</td>
<td width=”92″>19</td>
<td width=”94″>INATIVO</td>
<td width=”103″>2019/05/12</td>
<td width=”105″>2019/06/12</td>
</tr>
</tbody>
</table>22 de agosto de 2021 às 5:23 pm #149137José Laurindo ChiappaModeradorBlz ? Então, com CERTEZA eu não posso nem vou responder por você o Exercício todo (até porque isso seria NOCIVO para o seu Aprendizado), mas vou dar umas dicas, mostrar um “esqueleto”, a forma BÁSICA dos códigos que vc vai ter que escrever…
pergunta 1, criar uma procedure : vou assumir aqui que o ID da pessoa é numérico, E assumirei que esse ID é a Chave da tabela PESSOA que vai ser alterada, então ALÉM de perguntar pela coluna STATUS, vou filtrar o UPDATE pela coluna ID também… Ficaria tipo :
CREATE OR REPLACE PROCEDURE PRC_ATUALIZA (P_ID number) is BEGIN UPDATE PESSOA SET DELETED_ON = SYSDATE where ID = P_ID and STATUS = 'INATIVO'; END;
—> REPITO, isso que escrevei acima NÂO É o código pronto, completo e Apresentável, é só um Esqueleto, um esboço, mas tá relativamente PRÓXIMO, ok ?? Dá uma olhada nele E veja aí o que vc não entendeu nele ou coisa do tipo, qquer coisa pergunta…
pergunta 2, para que serve a trigger : presumo que a sua resposta foi esse trecho de ‘Esse gatilho serve para obter informações da linha que esta sento inserida na tabela, podendo ser atualizada.’ , não é só isso : REALMENTE uma trigger de FOR EACH ROW automaticamente VAI obter os valores da linha sofrendo INSERT/UPDATE/DELETE, ok, MAS faltou dizzer que a trigger pega essa valor E grava na tabela PESSOA_LOG, provavelmente pra fins de Auditoria.
pergunta 3, criar view : o ESBOÇO que vou escrever abaixo é BEM BEM mais longe da resposta final necessária (pois a solicitação completa é Muito Longa, pra fazer a coisa completa com certeza eu demoraria mais do que os 2 ou 3 minutos que gasto pra dar uma resposta), mas de modo geral vai ser algo tipo :
CREATE OR REPLACE VIEW V_ENDERECOS_PESSOA as SELECT P.ID as ID_PESSOA, P.NOME_PESSOA, E.ENDERECO, E.TIPO -- faltam todas as OUTRAS colunas.... FROM PESSOA P, ENDERECOS E WHERE P.ID = E.ID_PESSOA;
—> Observações Importantes : no ‘exemplo’ acima eu usei sintaxe não-ANSI para o JOIN (SE teu professor faz questão, vc Recodifique isso pra usar ANSI join) , NÃO coloquei TODAs as colunas pedidas (já que isto é só Rascunho), E, como vc não dá os NOMEs das colunas reais Nem a modelagem, eu coloquei como chaves pro JOIN da ENDERECOS com a PESSOA só a coluna ID, que na tabela PESSOA eu supus ser ID mesmo só o nome da coluna E na tabela ENDERECOS achei que a coluna se chama ID_PESSOA, pra não confundir com a coluna ID do Endereço….
pergunta 4, criar bloco PL/SQL que identifica PESSOAS sem endereco E as insere na tabela ENDERECO : como ele pede BLOCO PL/SQL, vou codificar isso num BLOCO PL/SQL ANÔNIMO, não vou usar nem procedure nem package pra isso… Ficaria tipo :
DECLARE v_code number; v_errm varchar2(255); BEGIN for r in (SELECT ID as ID_PESSOA, ID_ENDERECO, ... TODAS as outras colunas da ENDERECO .... FROM PESSOA P WHERE NOT EXISTS (select 1 FROM ENDERECO WHERE ID_PESSOA = P.ID ) loop Begin insert into ENDERECO (ID, ENDERECO, CIDADE, outracoluna....) VALUES (valordoID, 'AV. REPÚBLICA DO CHILE, 230', 'RIO DE JANEIRO', ... outros valores....); Exception when OTHERS then v_code := SQLCODE; v_errm := SUBSTR(SQLERRM, 1 , 64); DBMS_OUTPUT.PUT_LINE('Error code ' || v_code || ': ' || v_errm); INSERT INTO errors VALUES (v_code, v_errm, SYSTIMESTAMP); End; end loop; commit; END;
—> IMPORTANTE : além de reforçar o caráter de Exemplo Não Pronto pra rodar, como vc Não Disse Exatamente O QUE deve ser feito com os erros, eu Suponho que deve ser feito o arroz com feijão, ie : mostrar a msg e código E guardar numa tabela de log de erros, que teria sido já criada antes….
Abraços,
Chiappa
22 de agosto de 2021 às 10:17 pm #149143feynoordyParticipanteBoa noite, obrigado pela ajuda, vou busca com suas orientações e com as matérias aqui ja aplicadas aprender um pouco mais. Foi um exercício de aplicação mas as aulas ainda estão online e pra tirar as duvidas esta muito ruim. Mas desde ja lhe agradeço de verdade
23 de agosto de 2021 às 10:13 am #149145José Laurindo ChiappaModeradorBlz, a intenção era essa mesmo, ie, tentar te dar um norte, uma orientação geral, fico contente de poder ter ajudado…
-
AutorPosts
- Você deve fazer login para responder a este tópico.