* Versão do Oracle: 10 G
* Sistema Operacional: RH4
Srs.
Tenho Uma proc que enviar o Resultado de uma Query pro meu e-mail
CREATE OR REPLACE procedure tbs_teste
is
l_body long := chr(10)
|| lpad('KTABLESPACE', 30, ' ') || ' '
|| lpad('Tipo', 2, ' ') || ' '
|| lpad('KTBS_EM_USO', 15, ' ') || ' '
|| lpad('KTBS_SIZE', 10, ' ') || ' '
|| lpad('KTBS_MAXSIZE', 10, ' ') || ' '
|| lpad('KFREE_SPACE', 10, ' ') || ' '
|| lpad('KSPACE', 10, ' ') || ' '
|| rpad('KPERC', 7, ' ') || chr(10) ||
rpad('-', 50, '-') || ' ' ||
rpad('-', 2, '-') || ' ' ||
rpad('-', 15, '-') || ' ' ||
rpad('-', 10, '-') || ' ' ||
rpad('-', 10, '-') || ' ' ||
rpad('-', 10, '-') || ' ' ||
rpad('-', 10, '-') || ' ' ||
rpad('-', 7, '-') || chr(10);
begin
for x in (
select t.tablespace_name ktablespace,
substr(t.contents, 1, 1) tipo,
trunc((d.tbs_size-nvl(s.free_space, 0))/1024/1024) ktbs_em_uso,
trunc(d.tbs_size/1024/1024) ktbs_size,
trunc(d.tbs_maxsize/1024/1024) ktbs_maxsize,
trunc(nvl(s.free_space, 0)/1024/1024) kfree_space,
trunc((d.tbs_maxsize - d.tbs_size + nvl(s.free_space, 0))/1024/1024) kspace,
decode(d.tbs_maxsize, 0, 0, trunc((d.tbs_size-nvl(s.free_space, 0))*100/d.tbs_maxsize)) kperc
from
( select SUM(bytes) tbs_size,
SUM(decode(sign(maxbytes - bytes), -1, bytes, maxbytes)) tbs_maxsize,
tablespace_name tablespace
from ( select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name
from dba_data_files
union all
select nvl(bytes, 0) bytes, nvl(maxbytes, 0) maxbytes, tablespace_name
from dba_temp_files
)
group by tablespace_name
) d,
( select SUM(bytes) free_space,
tablespace_name tablespace
from dba_free_space
group by tablespace_name
) s,
dba_tablespaces t
where t.tablespace_name = d.tablespace(+) and
t.tablespace_name = s.tablespace(+)
order by 8)
loop
l_body := l_body || rpad(x.KTABLESPACE, 50, ' ') || ' ' ||
rpad(x.Tipo, 2, ' ') || ' ' ||
rpad(x.KTBS_EM_USO, 15, ' ') || ' ' ||
rpad(x.KTBS_SIZE, 10, ' ') || ' ' ||
rpad(x.KTBS_MAXSIZE, 10, ' ') || ' ' ||
rpad(x.KFREE_SPACE, 10, ' ') || ' ' ||
rpad(x.KSPACE, 10, ' ') || ' ' ||
rpad(x.KPERC, 7, ' ') || chr(10);
end loop;
mail.send
( p_sender_email => '<XXXXXXXX@XXXXXX.com.br>',
p_from => 'Nome Exibido <XXXXXXXX@XXXXXX.com.br>',
p_to => mail.array( '<XXXXXXXX@XXXXXX.com.br>'),
p_subject => 'Tbs ',
p_body => l_body );
end;
/
Bom, como vocês podem ver a Query busca Infomações do Dicionario de Dados.
Pois Bem. Eu Criei um usuario e Dei Acessos as tabelas dessa Query.
sem problemas, O select me tras o resultado devolta.
quando eu vou Compilar a PROC emite o Seguinte erro
Errors for PROCEDURE TBS_TESTE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
22/11 PL/SQL: SQL Statement ignored
44/10 PL/SQL: ORA-00942: table or view does not exist
53/3 PL/SQL: Statement ignored
53/28 PLS-00364: loop index variable 'X' use is invalid
se eu Criar a proc em baixo no Usuario SYS, a Proc Compila sem Errios agora se For Abaixo do meu usurios, eu não Consigo compilar Diz q a Tabela não Existe...
já Deu Grant de DBA e SYSDBA... e Nada!!!
não quero Criar Abaixo do SYS!!
Aguel tem uma Ideia ???