Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #107222
    Thiago Duarte Azadinho
    Participante

      Pessoal,

      Preciso criar uma procedure que faça um select para ver o consumo das tablespaces e mandar um email com as informações. Ja tenho um script que faça a consulta das tablespaces e tambem a string para mandar o email. O problema é que como há varias tablespaces ele só ta mandando email com a primeira linha, ja criei cursor mas não resolveu. alguem pode ajudar?

      Obrigado.

      #107226
      rman
      Participante

        @Thiago Duarte Azadinho

        Posta a sua solução, me parece que falta apenas alguns ajustes para ficar 100%.

        #107229
        Thiago Duarte Azadinho
        Participante

          @rman

          Criei uma materialized view com a query que faz consulta ao espaço das tablespaces.

          Depois criei uma procedure:

          create or replace PROCEDURE SYS.RESUMOBASE

          AS
          StrEmail VARCHAR2(200) := ‘thiago.azadinho@victus.com.br’;
          StrEmailCC VARCHAR2(100) := ”;
          StrNomeOperacao VARCHAR2(100) := ”;
          StrCorpoEmail VARCHAR2(4000) := ”;

          --Cursor C1 is select KTABLESPACE from sys.vresumobase;
          C1 Sys_Refcursor;
          

          BEGIN

          OPEN c1 for
          select * from sys.vresumobase;
          Fetch c1 into StrCorpoEmail;
          Close c1;

          Sp_Envia_Email_Oracle(‘RESUMO – ‘ || StrNomeOperacao, StrCorpoEmail, StrEmail, StrEmailCC);

          END;

          Ela compila normal, mas quando vou executar da erro:

          ERROR at line 1:
          ORA-06504: PL/SQL: Return types of Result Set variables or query do not match
          ORA-06512: at “SYS.RESUMOBASE”, line 16
          ORA-06512: at line 1

          Origado.

          #107230
          rman
          Participante

            @Thiago Duarte Azadinho

            Creio que seja isso, adiciona as informações necessárias no CURSOR.


            CREATE OR REPLACE PROCEDURE SYS.RESUMOBASE
            AS
            STREMAIL VARCHAR2(200) := ' thiago.azadinho@victus.com.br';
            STREMAILCC VARCHAR2(100) := '';
            STRNOMEOPERACAO VARCHAR2(100) := '';
            STRCORPOEMAIL VARCHAR2(4000) := '';

            CURSOR C1 IS
                SELECT KTABLESPACE
                FROM SYS.VRESUMOBASE;
            

            BEGIN

            FOR V1 IN C1
            LOOP
                STRCORPOEMAIL := V1.KTABLESPACE;
            
                SP_ENVIA_EMAIL_ORACLE('RESUMO - ' || STRNOMEOPERACAO
                                            ,STRCORPOEMAIL
                                            ,STREMAIL
                                            ,STREMAILCC);       
            END LOOP;
            

            END;

            Gostaria de deixar uma sugestão. Evite criar objetos no usuário SYS, crie um usuário novo para isso.

            #107233
            Thiago Duarte Azadinho
            Participante

              @rman

              Obrigado pela ajuda.

              Mas a procedure envia 1 email por linha, assim quando eu disparei enviou 50 emails, cada um com uma linha. Tem outra coisa tbm, precisava que enviasse varias colunas e do jeito que esta, esta enviando apenas uma coluna. Resumindo, teria que enviar uma instrução sql inteira em um unico email.

              Obrigado.

              #107234
              rman
              Participante

                @Thiago Duarte Azadinho

                Adicione as colunas que você precisa no SELECT do CURSOR, dentro do LOOP acesse a coluna como V1.NOMEDACOLUNA. Dentro do LOOP concatene e crie a mensagem que vai no email. Chame a PROCEDURE que envia email fora do LOOP.

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