Oracle
 sql >> Base de données >  >> RDS >> Oracle

Exporter les résultats de la requête Oracle vers un fichier HTML lors de l'utilisation de SQLcl

Lorsque vous utilisez SQLcl avec Oracle Database, vous pouvez utiliser le SPOOL commande pour exporter les résultats de votre requête vers un fichier avec un .html extension, et vous pouvez définir SQLFORMAT en html afin de générer les résultats réels de la requête au format HTML.

Exemple

Voici un exemple pour illustrer :

SET SQLFORMAT html;
SPOOL '/Users/barney/data/regions.html';
SELECT * FROM regions;
SPOOL off;
SET SQLFORMAT ansiconsole;

Voici ce qu'il a fait, ligne par ligne :

  • La première ligne définit SQLFORMAT en html . Cela garantit que notre .html résultant le fichier contient en fait du code HTML.
  • La deuxième ligne utilise le SPOOL commande pour spécifier où le fichier de sortie sera écrit. Assurez-vous de modifier /Users/barney/data/regions.html à un emplacement sur votre système et un nom de fichier approprié.
  • Sur la troisième ligne, j'ai exécuté la requête SQL - les résultats pour lesquels j'exporte. Dans ce cas, j'ai exporté l'ensemble des regions tableau.
  • Ensuite, j'ai tourné SPOOL éteint.
  • Enfin, j'ai défini SQLFORMAT retour à mon paramètre d'origine, qui était ansiconsole . Ceci est facultatif - vous pouvez le laisser à json si vous préférez, ou remplacez-le par autre chose.

Voici à quoi ressemble le fichier résultant :

  • regions.html

Et voici le code source derrière ce fichier :

<!DOCTYPE html>
<html>

<head>
  <meta charset='UTF-8'>
  
  <title>Result Data</title>
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  
  <style>
  * { 
    margin: 0; 
    padding: 0; 
  }
  body { 
    font: 14px/1.4 Palatino, Serif; 
  }
  
  /* 
  Generic Styling, for Desktops/Laptops 
  */
  table { 
    width: 100%; 
    border-collapse: collapse; 
  }
  /* Zebra striping */
  tr:nth-of-type(odd) { 
    background: #eee; 
  }
  th { 
    background: #333; 
    color: white; 
    font-weight: bold; 
  }
  td, th { 
    padding: 6px; 
    border: 1px solid #9B9B9B; 
    text-align: left; 
  }
  @media 
  only screen and (max-width: 760px),
  (min-device-width: 768px) and (max-device-width: 1024px)  {
    table, thead, tbody, th, td, tr { display: block; }
    thead tr { position: absolute;top: -9999px;left: -9999px;}
    tr { border: 1px solid #9B9B9B; }
    td { border: none;border-bottom: 1px solid #9B9B9B; position: relative;padding-left: 50%; }
    
    td:before { position: absolute;top: 6px;left: 6px;width: 45%; padding-right: 10px; white-space: nowrap;}
    
    /*
    Label the data
    */
td:nth-of-type(1):before { content: "REGION_ID"; }
td:nth-of-type(2):before { content: "REGION_NAME"; }
  }
  
  /* Smartphones (portrait and landscape) ----------- */
  @media only screen
  and (min-device-width : 320px)
  and (max-device-width : 480px) {
    body { 
      padding: 0; 
      margin: 0; 
      width: 320px; }
    }
  
  /* iPads (portrait and landscape) ----------- */
  @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
    body { 
      width: 495px; 
    }
  }
  
  </style>
  <!--<![endif]-->
<script type="text/javascript">

function search(){
  
  var s = document.getElementById('search').value;

  rows = document.getElementById('data').getElementsByTagName('TR');
  for(var i=0;i<rows.length;i++){
    if ( rows[i].textContent.indexOf(s)>0  || s.length==0 ) {
	  rows[i].style.display ='';
    } else {
      rows[i].style.display ='none';
    }
  }
}


var timer;
function delayedSearch() {
	clearTimeout(timer);
	console.log('delay-ing')
    timer = setTimeout(function () {
		console.log('delay-running')
		search();
    }, 500);
  }</script>
</head>

<body>
<div><input type="text" size="30" maxlength="1000" value="" id="search" onkeyup="delayedSearch();" /><input type="button" value="Go" onclick="lsearch();"/> </div>
<table><thead><tr>	<th>REGION_ID</th>
	<th>REGION_NAME</th>
</tr></thead>
<tbody id="data">

	<tr>
<td align="right">1</td>
<td>Europe</td>
	</tr>
	<tr>
<td align="right">2</td>
<td>Americas</td>
	</tr>
	<tr>
<td align="right">3</td>
<td>Asia</td>
	</tr>
	<tr>
<td align="right">4</td>
<td>Middle East and Africa</td>
	</tr>
</tbody></table><!-- SQL:
SELECT * FROM regions--></body></html>

4 rows selected.

Ainsi, il génère tout le document HTML - pas seulement le tableau.

Vous remarquerez que certains CSS ont été ajoutés à des fins de style et que JavaScript a été ajouté pour créer une fonction de recherche.

Supprimer les commentaires

Vous pouvez supprimer le X rows selected avec SET FEEDBACK off :

SET SQLFORMAT html;
SET FEEDBACK off;
SPOOL '/Users/barney/data/regions_feedback_off.html';
SELECT * FROM regions;
SPOOL off;
SET FEEDBACK on;
SET SQLFORMAT ansiconsole;

Dans ce cas, j'ai activé FEEDBACK de nouveau après l'exportation du fichier.