Pular para o conteúdo
Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #107222
    Avatar de Thiago Duarte AzadinhoThiago Duarte Azadinho
    Participant

      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
      Avatar de rmanrman
      Participant

        @Thiago Duarte Azadinho

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

        #107229
        Avatar de Thiago Duarte AzadinhoThiago Duarte Azadinho
        Participant

          @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
          Avatar de rmanrman
          Participant

            @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
            Avatar de Thiago Duarte AzadinhoThiago Duarte Azadinho
            Participant

              @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
              Avatar de rmanrman
              Participant

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

              Viewing 6 posts - 1 through 6 (of 6 total)
              • You must be logged in to reply to this topic.
              plugins premium WordPress