Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sqlcl_oracle_extend_commandregistry

SQLcl flexibel nach Bedarf mit einem CommandoListener erweitern

Über das neue SQLcl siehe auch ⇒ SQLcl - Quo vadis SQL*Plus? - Das neue SQL*Plus in der Praxis - Der neue SQL Kommando Interpreter für die Oracle Datenbank und Jython Scripting für die Oracle Datenbank mit SQLcl

Aufgabe:

Über einen „Hint“ im SQL Befehl soll gesteuert werden, ob die Ausführungszeit für das Statement am Ende ausgeben wird.

Command Ausführung in SQLcl steuern

Wir definieren einen Event Handler, der vor und nach jeden abgesetzten Kommando in SQLcl aktiv wird.

Es gibt zwei Typen von Event Listener

  • Wird bei diesem Command gerufen: CommandRegistry.addListener(<class>,<command>)
  • Wird bei jeden Command gerufen : CommandRegistry.addForAllStmtsListener(<class>)

Code

<// Refernz to the SQLcl Command Registry Class
var CommandRegistry = Java.type("oracle.dbtools.raptor.newscriptrunner.CommandRegistry");
 
// CommandListener for creating new any command Listener
var CommandListener =  Java.type("oracle.dbtools.raptor.newscriptrunner.CommandListener")
 
// Java Script object to hold the new methodes
var extCommand = {};
 
// Called to attempt to handle any command
extCommand.handleEvent = function (conn,ctx,sqlcl) {
    // return FALSE to indicate the command was not handled
    // now other commandListeners can handle this command
   return false;
}
 
// fired before ANY command
extCommand.beginEvent = function (conn,ctx,sqlcl) {
	//  Get the actual command 
    if ( sqlcl.getSql().indexOf("showTime") > 0 ){
   		ctx.putProperty("gpi.showTiming",true);
	    ctx.write("\n -- Debug sqlcl: " + sqlcl.getSql()+ " Set timing on true \n");
		//remember the time
		ctx.putProperty("gpi.startTiming",new Date());
	} 
}
 
// fired after ANY Command
extCommand.endEvent = function (conn,ctx,sqlcl) {
   if ( ctx.getProperty("gpi.showTiming") ) {
	  var end = new Date().getTime();
 	  var start = ctx.getProperty("gpi.startTiming");   
      start = start.getTime();
  	  // print out elapsed time of all commands
      ctx.write("Command elapsed time :: " + (end - start) + " ms \n");
	  //unset 
	  ctx.putProperty("gpi.showTiming",false);
   }
}
 
// Actual Extend of the Java CommandListener
 
var ShowTimingCmd = Java.extend(CommandListener, {
	handleEvent: extCommand.handleEvent ,
        beginEvent:  extCommand.beginEvent  , 
        endEvent:    extCommand.endEvent    
});
 
// Registering the new Command
CommandRegistry.addForAllStmtsListener(ShowTimingCmd.class);

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/sqlcl_oracle_extend_commandregistry.txt · Zuletzt geändert: 2016/11/15 19:58 von Gunther Pippèrr