=====SQLcl flexibel nach Bedarf mit einem CommandoListener erweitern===== Über das neue SQLcl siehe auch => [[dba:sqlcl_oracle_command_line_in_12c|SQLcl - Quo vadis SQL*Plus? - Das neue SQL*Plus in der Praxis - Der neue SQL Kommando Interpreter für die Oracle Datenbank]] und [[python:jython_scripting_database|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(,)** * Wird bei jeden Command gerufen : **CommandRegistry.addForAllStmtsListener()** ---- ==== Code ==== 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 ==== Beispiel Source Code von Kris Rice * https://github.com/oracle/oracle-db-tools/blob/master/sqlcl/examples/customCommand.js