REVELAR

Fórum Loop nas colunas de um cursor #28544

17/07/2006

0

Ola, Estou com um pequeno problema, eu estou quero montar um e-mail em formato html,pelo oracle,
Ate ai sem, problemas,so que eu quero montar as colunas da tabela dinamicamentes baseado na consulta que eu passar,
este o meu problema,náo sei como,ja testei, passando a consulta, e com qt fixas de coluna e deu certo
Mas qeuro fazer um loop nas colunas de cada linha,Ai vai um resumo do codigo, se poderem me ajudar.

declare
smtp utl_smtp.connection;
SqlCursor pls_integer;
NumRows pls_integer;
TYPE TCol IS TABLE OF dbms_sql.varchar2_table INDEX BY BINARY_INTEGER;
vCol TCol ;
NCol integer;
Coluna integer;
Linha Integer;
begin
NCol:=3;
smtp:=utl_smtp.open_connection(servidor,25);

-- Comfiguraçoes do UTL_SMTP etc .....

--Esta e a parte importante

SqlCursor := dbms_sql.open_cursor;
dbms_sql.parse(SqlCursor, ´select ..... from ...´,cmd,DBMS_SQL.NATIVE);
Coluna:=0;
for Coluna in 1..nCol loop
dbms_sql.define_array(SqlCursor,Coluna, vCol(Coluna), 10, 1);
end loop;
Coluna:=0;
loop
NumRows := dbms_sql.fetch_rows(SqlCursor);
IF NOT NUMROWS=0 THEN
for Coluna in 1..nCol loop
dbms_sql.column_value(SqlCursor,Coluna, vCol(Coluna));
end loop;
ELSE
EXIT;
END IF;
end loop;
dbms_sql.close_cursor(SqlCursor);
for Linha in 1..vCol(1).count loop
UTL_SMTP.WRITE_DATA(smtp,´´|| UTL_TCP.CRLF);
Coluna:=0;
for Coluna in 1..Ncol loop
UTL_SMTP.WRITE_DATA(smtp,´<td>´);
utl_smtp.write_raw_data(smtp,utl_raw.cast_to_raw(vCol(Coluna)(Linha))); ----Este e o meu problema,coloqeui assim para melhor inlustrar.
UTL_SMTP.WRITE_DATA(smtp,´</td>´);
END loop;
UTL_SMTP.WRITE_DATA(smtp,´´);
end loop;
UTL_SMTP.WRITE_DATA(smtp,´</body></html>´);
UTL_SMTP.CLOSE_DATA(smtp);
UTL_SMTP.QUIT(smtp);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
BEGIN
UTL_SMTP.QUIT(smtp);
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
trata o erro


Rogeriorock

Rogeriorock

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar