- This topic has 5 replies, 2 voices, and was last updated 9 years, 11 months ago by rman.
-
AuthorPosts
-
16 de dezembro de 2014 at 5:19 pm #107222Thiago Duarte AzadinhoParticipant
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.
16 de dezembro de 2014 at 8:33 pm #107226rmanParticipant@Thiago Duarte Azadinho
Posta a sua solução, me parece que falta apenas alguns ajustes para ficar 100%.
16 de dezembro de 2014 at 9:21 pm #107229Thiago Duarte AzadinhoParticipant@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 1Origado.
16 de dezembro de 2014 at 9:54 pm #107230rmanParticipant@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.
17 de dezembro de 2014 at 3:12 pm #107233Thiago Duarte AzadinhoParticipant@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.
17 de dezembro de 2014 at 7:20 pm #107234rmanParticipant@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.
-
AuthorPosts
- You must be logged in to reply to this topic.