- Este tópico contém 5 respostas, 2 vozes e foi atualizado pela última vez 7 anos, 10 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
4 de fevereiro de 2017 às 12:54 am #108617airoospParticipante
Boa tarde,
Alguém sabe como remover ********** do resultado da consulta feita no SQLPLUS, quando se usa o compute sum?
A C M E W I D G E T
EMPLOYEE REPORT PAGE: 1
DEPARTMENT LAST NAME MONTHLY SALARY
———- ————————- ————–
20 Hartstein $13,000
********** ————–
sum $13,00080 Russell $14,000
Partners $13,500
********** ————–
sum $27,50090 King $24,000
Kochhar $17,000
De Haan $17,000
********** ————–
sum $58,000————–
sum $98,500
COMPANY CONFIDENTIALO resultado seria:
A C M E W I D G E T
EMPLOYEE REPORT PAGE: 1
DEPARTMENT LAST NAME MONTHLY SALARY
———- ————————- ————–
20 Hartstein $13,000
————–
sum $13,00080 Russell $14,000
Partners $13,500
————–
sum $27,50090 King $24,000
Kochhar $17,000
De Haan $17,000
————–
sum $58,000————–
sum $98,500
COMPANY CONFIDENTIALObrigado.
Airton
6 de fevereiro de 2017 às 6:31 pm #108618José Laurindo ChiappaModeradorOi : que eu saiba não tem como, o comando COMPUTE foi programado para inserir um caracter indicando qual coluna foi usada no BREAK, e foi adotado o caracter * para isso, tipo :
SQL> set pages 50000
SQL> column DEPTNO format 009 HEAD ‘Dep.’
SQL> COMPUTE SUM label ‘Soma’ of sal ON DEPTNO
SQL> break on DEPTNO nodup
SQL> SELECT DEPTNO, ENAME, SAL from emp order by deptno;
Dep. ENAME SAL
010 CLARK 2450
KING 5000
MILLER 1300
**** ----------
Soma 8750
020 JONES 2975
FORD 3000
ADAMS 1100
SMITH 800
SCOTT 3000
**** ----------
Soma 10875
030 WARD 1250
TURNER 1500
ALLEN 1600
JAMES 950
BLAKE 2850
MARTIN 1250
**** ----------
Soma 940014 linhas selecionadas.
SQL>
==> Não é o que vc quer mas só para indicar, uma possibilidade que sempre houve é vc não exibir a coluna do BREAK, assim não haverá exibição do caracter mas o COMPUTE continua funcionando :
SQL> clear breaks;
breaks conteúdo removido
SQL> clear compute;
computes conteúdo removidoSQL> column dummy noprint
SQL> COMPUTE SUM label “Soma” OF SAL ON DUMMY
SQL> break on DUMMY noDUP;SQL> compute
COMPUTE sum LABEL ‘Soma’ OF SAL ON DUMMY
SQL> break
break on DUMMY nodup
SQL> SELECT DEPTNO as DUMMY, DEPTNO, ENAME, SAL from emp order by deptno;Dep. ENAME SAL
010 CLARK 2450
010 KING 5000
010 MILLER 1300
----------
8750
020 JONES 2975
020 FORD 3000
020 ADAMS 1100
020 SMITH 800
020 SCOTT 3000
----------
10875
030 WARD 1250
030 TURNER 1500
030 ALLEN 1600
030 JAMES 950
030 BLAKE 2850
030 MARTIN 1250
----------
9400
14 linhas selecionadas.
==> É algo mais próximo do que vc quer, imagino, MAS como agora não há BREAK por DEPTNO (só pela DUMMY) aí as repetições de DEPTNO aparecem… E comprovando que se a coluna sendo BREAKada aparece o caracter indicativo surge :
SQL> break on DUMMY nodup on deptno nodup
SQL> break
break on DUMMY nodup
on deptno nodup
SQL> select DEPTNO as DUMMY, DEPTNO, ENAME, SAL from emp order by deptno;Dep. ENAME SAL
010 CLARK 2450
KING 5000
MILLER 1300
**** ----------
8750
020 JONES 2975
FORD 3000
ADAMS 1100
SMITH 800
SCOTT 3000
**** ----------
10875
030 WARD 1250
TURNER 1500
ALLEN 1600
JAMES 950
BLAKE 2850
MARTIN 1250
**** ----------
9400
14 linhas selecionadas.==> A sua resposta portanto é : até onde sei (como eu nunca precisei disso nunca fiz nenhuma pesquisa mais profunda) usando BREAK e COMPUTE não tem como vc eliminar o caracter indicador da quebra, se a coluna está sendo Exibida…..
Assim, se vc realmente precisa usar BREAK e COMPUTE (hoje em dia a gente consegue fazer somas de grupos diretamente na query via Analytics, com **** muito mais Possibilidades e liberdade do que BREAK+COMPUTE), talvez vc possa fazer como eu fazia lá no início da carreira quando não tínhamos os recursos, que era simplesmente gerar o arquivo-texto do report normalmente e depois no Sistema Operacional (via grep, wc e comandos de manipulação de arquivo) eliminar as linas que começam com *** ….[]s
Chiappa
7 de fevereiro de 2017 às 1:05 am #108619airoospParticipanteBoa tarde Chiappa, agradeço as informações.
Procurando mais informações sobre a geração de relatório no SQLPLUS, vi alguns exemplos e vi que é possível fazer uma formatação com HTML.
set verify off trimspool on trimout on feedback off heading on echo off pages 100 termout off
SET MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP ON –
HEAD “Department Report –
– –
” –
BODY “TEXT=’#33D4FF'” –
TABLE “WIDTH=’90%’ BORDER=’5′”spool c:sqlmonitorarcurrentTime2.html
select ‘‘||substr(to_char(sysdate,’DD/MON/YYYY HH24:MI:SS’),1,20)||’‘ as “Current Time” from dual;
spool off
quitNo exemplo acima a consulta funciona mas na exibição do arquivo HTML aparece:
06/FEV/2017 19:01:30
Alguém já utilizou este tipo de formatação?
Obrigado.
Airton
7 de fevereiro de 2017 às 4:12 am #108620José Laurindo ChiappaModeradorYep, geração de comandos HTML via CSS foi introduzido no sqlplus lá pela versão 9i, há muuuuuito tempo…. Eu já utilizei algumas vezes mas para saída simples, ie, tabelinha HTML onde no máximo tem uma linha de título (e como não manjo grande coisa de CSS e/ou de HTML copiei das refs, como http://avaismohammed.blogspot.com.br/2014/08/generating-html-reports-from-oracle.html, http://ittichaicham.com/2008/12/generating-html-reports-from-sql-plus/comment-page-1/ e http://blog.tanelpoder.com/2007/08/07/sqlplus-is-my-second-home-part-1-htmlizing-your-sqlplus-output/)…. Veja lá se essas refs te ajudam… Na parte do CSS em si (que é de onde deve estar vindo os caracteres extras, de uma falha do CSS) tenta http://www.htmldog.com/guides/css/beginner/, https://www.codecademy.com/en/tracks/htmlcss e http://www.w3schools.com/css/ como Tutos….
Outra coisa que eu nunca fiz foi MISTURAR os comandos de Reporting do sqlplus (ie, BTITLE, TTITLE, BREAK, PAGEs, etc) com o HTML markup : não sei se isso vai funcionar a contento não…[]s
Chiappa
7 de fevereiro de 2017 às 10:40 pm #108621airoospParticipanteChippa,
Verificando os links que você passou e outras pesquisas que fiz, consegue resolver uma parte do código, mas a linha abaixo ainda não consegui fazer funcionar.
select ‘‘||substr(to_char(sysdate,’DD/MON/YYYY HH24:MI:SS’),1,20)||’‘ as “Current Time” from dual;
Estranho que em vários sites os exemplos são: select html tag campo from tabela.
Fiz o teste no Firefox e Internet Explorer.
8 de fevereiro de 2017 às 12:58 am #108622José Laurindo ChiappaModeradorBom, vc poderia colocar meu conhecimento de CSS e HTML entre as teclas dum teclado que o bichinho ia funcionar ** perfeitamente ** de tão “grande” que é , mas seguindo os links que te passei (em especial o http://ittichaicham.com/2008/12/generating-html-reports-from-sql-plus/comment-page-1/) e cheguei num caso simples belezinha, sem ** NADA ** de aparecer /b nem nada assim…. Aliás, essa tag aí de acordo com https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/b ficou ***** OBSOLETA ***** faz tempo, não devia estar nem sendo usada, nem Imagino de onde vc tirou isso : e repente vc está usando um sqlplus antigão, ou está seguindo algum exemplo antigo e despreparado ?? Anyway , eis o meu exemplo :
==> primeiro crio uma massinha de dados :
SQL> create table TBL_TICKETS (ID number, DESCRIPTION varchar2(30), ASSIGNED_TO varchar2(25),
2 OPEN_DATE date, BACKLOG number);Tabela criada.
SQL> insert into TBL_TICKETS values(2, ‘Compiler not work’, ‘Jim K’, ’08/Out/2008′, 76);
1 linha criada.
SQL> insert into TBL_TICKETS values(3, ‘Cannot access database’, ‘John F’, ’11/Nov/2008′, 42);
1 linha criada.
SQL> insert into TBL_TICKETS values(4, ‘Query is too slow’, ‘John F’, ’11/Dez/2008′, 12);
1 linha criada.
SQL> insert into TBL_TICKETS values(5, ‘System reboot unexpectedly’, ‘David K’, ’21/Dez/2008′, 2);
1 linha criada.
SQL> commit;
Commit concluído.
SQL>
==> aí tenho um script que faz o setup geral para HTML Markup :
C:Usersjlchi_000>type set_markup.sql
set markup HTML ON HEAD ” –
body { –
font:10pt Arial,Helvetica,sans-serif; –
color:blue; background:white; } –
p { –
font:8pt Arial,sans-serif; –
color:grey; background:white; } –
table,tr,td { –
font:10pt Arial,Helvetica,sans-serif; –
text-align:right; –
color:Black; background:white; –
padding:0px 0px 0px 0px; margin:0px 0px 0px 0px; } –
th { –
font:bold 10pt Arial,Helvetica,sans-serif; –
color:#336699; –
background:#cccc99; –
padding:0px 0px 0px 0px;} –
h1 { –
font:16pt Arial,Helvetica,Geneva,sans-serif; –
color:#336699; –
background-color:White; –
border-bottom:1px solid #cccc99; –
margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} –
h2 { –
font:bold 10pt Arial,Helvetica,Geneva,sans-serif; –
color:#336699; –
background-color:White; –
margin-top:4pt; margin-bottom:0pt;} –
a { –
font:9pt Arial,Helvetica,sans-serif; –
color:#663300; –
background:#ffffff; –
margin-top:0pt; margin-bottom:0pt; vertical-align:top;} –
.threshold-critical { –
font:bold 10pt Arial,Helvetica,sans-serif; –
color:red; } –
.threshold-warning { –
font:bold 10pt Arial,Helvetica,sans-serif; –
color:orange; } –
.threshold-ok { –
font:bold 10pt Arial,Helvetica,sans-serif; –
color:green; } –
–
SQL*Plus Report ” –
BODY “” –
TABLE “border=’1′ width=’90%’ align=’center'” –
ENTMAP OFF SPOOL ONC:Usersjlchi_000>
(infelizmente não consegui um bom exemplo de Imagem pública na internet pra usar no img src , essa que eu botei aí em cima não funcionou, o site deve estar protegido, mas não faz mal…)
==> aí, esse script set_markup.sql é chamado de dentro do script que eu quero que gere o SPOOL em formato HTML, que eu chamei de run_weekly_backlog_report.sql :
C:Usersjlchi_000>type run_weekly_backlog_report.sql
@set_markup.sql
set pages 100
TTITLE LEFT _DATE CENTER ‘Weekly Top Backlog Report : Database Team NA Region
‘ –
RIGHT ‘Page:’ FORMAT 999 SQL.PNO SKIP CENTER ‘Red = Backlog > 30 days, Orange > 10 days
‘
spool backlog_report.htm
select ‘‘||ID||’‘ ID,
DESCRIPTION, ASSIGNED_TO, OPEN_DATE,
CASE
when SYSDATE-OPEN_DATE > 3040 then
‘‘||to_char(trunc(SYSDATE-OPEN_DATE))||’‘
when SYSDATE-OPEN_DATE > 3000 then
‘‘||to_char(trunc(SYSDATE-OPEN_DATE))||’‘
ELSE
‘‘||to_char(trunc(SYSDATE-OPEN_DATE))||’‘
END BACKLOG
from TBL_TICKETS
order by SYSDATE-OPEN_DATE DESC;spool off
exit
/==> veja que é no CSS que vc coloca o atributo de BOLD, de Fonte do que quiser : tenho elementos no meu CSS que fazem o texto ficar em cores diferentes, com pesos diferentes…
Muito bem, vou executar o script de report – veja que ele ** TEM ** que ser rodado a partir da Linha de Comando, e portanto TEM que ter um EXIT no final : é tal que nem eu fiz no meu exemplo de geração de arquivo delimitado que dei numa Outra pergunta do Fórum….C:Usersjlchi_000>sqlplus scott/tiger @run_weekly_backlog_report.sql
==> Veja que o script vai rodar e vai jogar uns outputs na tela, nenhum deles importa :
SQL*Plus: Release 11.2.0.2.0 Production on Ter Fev 7 18:19:57 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production07/02/17 Weekly Top Backlog Report : Database Team NA Region
…..
21/12/082970 Desconectado de Oracle Database 11g Express Edition Release 11.2.0.2.0 – 64bit Production
==> Veja que ele ** gerou ** o desejado arquivo em format HTML :
C:Usersjlchi_000>dir *.htm
O volume na unidade C não tem nome.
O Número de Série do Volume é 340C-E794Pasta de C:Usersjlchi_000
07/02/2017 18:19 3.071 backlog_report.htm
1 arquivo(s) 3.071 bytes
0 pasta(s) 480.876.212.224 bytes disponíveisC:Usersjlchi_000>
==> aí abrindo o arquivo no Firefox eu vejo colunas em vermelho, em laranja, em bold e com FOntes específicas… Ó o printscreen :
Espero que esse exemplinho te seja útil, okdoc ??
Abraços,
José Laurindo Chiappa
OBS : eu usei o sqlplus que vêm com o database Oracle Express Edition 11gR2…
-
AutorPosts
- Você deve fazer login para responder a este tópico.