HTML отчет Oracle sqlplus - цвет чередующихся строк - PullRequest
2 голосов
/ 25 января 2011

Я использую Oracle sqlplus "установить разметку HTML на" быстро преобразовать вывод запроса в отчет HTML -

Это очень простой способ опубликовать отчет базы данных в Интернете.

Я пропускаю, однако, одну вещь - чередование цветов для каждого второго ряда, Это особенно полезно при просмотре широких отчетов.

есть ли способ вставить цвет HTML для каждой строки, как сделать его зависимым от мода (rownum / 2) - четный / нечетный номер строки?

спасибо!

Ответы [ 4 ]

6 голосов
/ 25 января 2011

Я не думаю, что есть, используя SET MARKUP HTML ON.Вы должны написать свою собственную разметку примерно так:

select '<tr style="color:' 
       || CASE mod(rownum,2) WHEN 0 THEN 'red' ELSE 'green' END
       || '"><td>' || ename || '</td></tr>' data
from 
( select ename from emp order by ename );

Затем добавьте теги окружающих таблиц, используя PROMPT или что-то еще.

4 голосов
/ 06 марта 2011

Существует отличное решение с CSS 3 (от опытного веб-разработчика Леона Зингера).Перед установкой html-разметки внутри тега head напечатайте это:

prompt <style>tr:nth-child(2n) { background-color: #CCE6FF ;} tr:nth-child(2n+1) { background-color: LightGray;}</style>

(очевидно, цвета можно настроить в соответствии с вашими потребностями)

Вот другой синтаксис для чередования:

.row:nth-child(even) {
  background: #dde;
}
.row:nth-child(odd) {
  background: white;
}
0 голосов
/ 09 апреля 2012
/* File: sqlplus-runner-csv.sql v1.0.0 docs at the end */
/* do not print echo commands */
set echo off
/* do not require feedback from the user */
set feedback off
/* set a nice prompt */
set sqlprompt ''
/* -- separate columns with a comma */
set colsep ';'
/* -- only one header row */
set pagesize 0   
/*-- remove trailing blanks */
set trimspool on 
/* REMOVE THE WHITE SPACE */
set trimout on
/* -- this may or may not be useful...depends on your headings. */
set headsep ON
/* how- long the line should be */
set linesize 3000   
/* print the headers as well */
set heading on
/* request full html for output */
/* set markup html on spool off */

/* define the file where the output of the results should be stored */
spool "&1..html"

-- START SQL
select '<html> <head> <title>tables</title>   <style type="text/css">     table tbody tr td {       background-color: #eee;     }     table tr.odd  td {       background-color: #fff;     }   </style> </head><body><table>
' from dual ; 
-- specify grey ( #CCC ) and white colors 
-- open the row 
select '<tr class="' 
|| CASE mod(rownum,2) WHEN 0 THEN 'odd' ELSE 'even' END
|| '">' 
-- print a single table cell 
|| ' <td>' || OWNER || '</td>' 
-- print another single table cell
|| ' <td>' || TABLE_NAME || '</td>'        
-- close the row 
|| '</tr>'        FROM 
-- IF YOU NEED ORDER BY CLAUSE AS WELL, 
( 
SELECT OWNER , TABLE_NAME FROM ALL_TABLES ORDER BY OWNER , TABLE_NAME
) 
; 



select '</table></body></html>' from dual ; 
-- STOP SQL 

spool off ; 

/* exit the sqlplus tool */   
EXIT 0; 

/* 
Purpose: 
- to provide a single sql statement to run agains an oracle database 
- to output a single file passed as the first argument to the script 

VersionHistory: 
1.1.0 --- 2012.04.08 - 23:04:19  ---  ysg --- Added order by clause
1.0.0 --- 2012.04.08 - 22:07:19  ---  ysg --- Initial creation 
*/
0 голосов
/ 09 апреля 2012
:: File: sqlplus-runner-html
@ECHO off

:: go the run dir
cd %~dp0
:: this is the dir containing the batch file
set MyDir=%CD%

for %%A in (%0) do set MyDriveLetter=%%~dA
for %%A in (%0) do set MyPath=%%~pA
for %%A in (%0) do set MyName=%%~nA
for %%A in (%0) do set MyExtension=%%~xA

:: ECHO MYNAME IS %0
:: ECHO MyDriveLetter is %MyDriveLetter%
:: ECHO MyPath is %MyPath%
:: ECHO MyName is %MyName%
:: ECHO MyExtension is %MyExtension%

:: the ora script is the same as the file name + the sql extension
set OraSqlScript=%MyDir%\%MyName%.sql
:: define the oracle user name to use to connect to ora
set OracleUserName=MyOracleUserName
:: get user input
:: SET /P Pass=[Please, provide the password for the %OracleUserName%:]
:: the pass to use to connect to the service 
SET Pass=MySecretPass
:: define the name of the service 
set TnsServiceName=ORASERVICENAME
:: define the log file 
set LogFile=%MyDriveLetter%\%MyPath%\%MyName%.log
:: define the error log file 
set ErrorLogFile=%MyDriveLetter%\%MyPath%\%MyName%.error.log

:: clear the result of the previous runs 
del /q %MyDir%\*.lst
del /q %MyDir%\*.log


:: Action !!!
:: call with the listener service name 
:: sqlplus %OracleUserName%/%Pass%@%TnsServiceName @%OraSqlScript% %MyName% > %LogFile% 2>%ErrorLogFile%

:: call without the listener service name 
sqlplus %OracleUserName%/%Pass% @%OraSqlScript% %MyName% > %LogFile% 2>%ErrorLogFile%


:: Purpose: 
:: create a generic wrapper for executing oracle sql commands trough the sqplplus
:: client

:: Requirements:
:: Windows XP or newer
:: sqlplus client on local windows
:: access to oracle database 
:: %MyName%.sql with the proper sqlplus syntax to execute the sql statememtns


:: Usage: 
:: call from dos or double-click in Explorer

:: VersionHistory
:: 1.1.0 --- ysg --- Removed listener name 
:: 1.0.0 --- ysg --- Initial version
...