Pular para o conteúdo
  • Este tópico contém 8 respostas, 2 vozes e foi atualizado pela última vez 2 anos, 8 meses atrás por Avatar de José Laurindo ChiappaJosé Laurindo Chiappa.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #149109
    Avatar de feynoordyfeynoordy
    Participante

      precisava de ajuda com 4 perguntas da faculdade sera que alguem pode me ajudar?

      #149110
      Avatar de feynoordyfeynoordy
      Participante

         

        • 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;

         

         

        #149111
        Avatar de feynoordyfeynoordy
        Participante
          • 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.
          #149112
          Avatar de feynoordyfeynoordy
          Participante
            • 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.
            #149113
            Avatar de feynoordyfeynoordy
            Participante

              <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>

              #149114
              Avatar de feynoordyfeynoordy
              Participante

                <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/01

                2 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/25

                5 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>

                #149137
                Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
                Moderador

                  Blz ? 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

                  #149143
                  Avatar de feynoordyfeynoordy
                  Participante

                    Boa 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

                    #149145
                    Avatar de José Laurindo ChiappaJosé Laurindo Chiappa
                    Moderador

                      Blz, a intenção era essa mesmo, ie, tentar te dar um norte, uma orientação geral, fico contente de poder ter ajudado…

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress