Oracle database developer choice awards

I've been selected as a finalist in the 2015 Oracle Database Developer Choice Awards...! September 2015

Working with long columns

Various techniques for querying and manipulating long columns. July 2010 (updated March 2012)

Profiling trace files with preprocessor external tables in 11g

Generate and read TKProf and OraSRP reports in a single SQL*Plus window (or other IDE of choice) using preprocessor external tables. November 2011

Runstats utility

A variation on Tom Kyte's invaluable RUNSTATS utility that compares the resource consumption of two alternative units of work. Designed to work under constrained developer environments and builds on the original with enhancements such as "pause and resume" functionality, time model statistics and the option to report on specific statistics. (more...)

Mystats utility

A variation on Jonathan Lewis's SNAP_MY_STATS package to report the resource consumption of a unit of work between two snapshots. Designed to work under constrained developer environments, this version has enhancements such as time model statistics and the option to report on specific statistics. ***Update*** Now available in two formats: (more...)

Xplan utility

A utility to add parent ID and execution order information to plans reported by DBMS_XPLAN. XPlan includes DISPLAY, DISPLAY_CURSOR and DISPLAY_AWR functionality for use in exactly the same way as the DBMS_XPLAN equivalents. Supports versions from 10g onwards. ***Update*** Now available in two formats: 1) as a PL/SQL package and (more...)


The (M)other (O)f (A)ll (T)uning (S)cripts. A tuning and diagnostics utility for SQL*Plus co-developed with Tanel Poder. Includes active session sampling and a TOP-style utility for displaying instance activity at regular refresh intervals. Supports versions from 10g Release 2 onwards. September 2010 (updated March 2011)

Dictionary long application

Two versions of an application to encapsulate the data dictionary views that have LONG columns. LONGs are converted to CLOBs in pipelined functions, enabling us to search, copy and manipulate these columns with string functions. A static version supports 9.2 and 10.1 and a dynamic ANYDATASET version supports (more...)

Dynamic sql enhancements in 11g

Oracle completes its dynamic SQL implementation for PL/SQL. February 2008 (updated June 2010)

Listagg function in 11g release 2

A new built-in function for string aggregation. June 2010

Pl/sql function result cache in 11g

Oracle provides a cross-session cache for user-defined PL/SQL function results. January 2008 (updated June 2010)

Improving performance with pipelined table functions

Using pipelined functions as a performance tuning tool. January 2010

Collect enhancements in 11g release 2

Aggregate unique and ordered collection elements with the COLLECT function in 11g. November 2009

Collection sorter utility

A package of two functions to sort collections, including support for descending and distinct sorts. Works with versions from 9i Release 2 onwards but can be easily edited to support 8i. November 2009

Collection cardinality utility

A utility to provide the CBO with the correct cardinality of small collections used in TABLE() queries (such as variable in-lists). This helps to achieve better execution plans without having to use the undocumented CARDINALITY hint. Supports versions from 10g onwards. November 2009

Sorting collections

Various techniques for sorting collections. November 2009

Listing files with the external table preprocessor in 11g

Using the 11g external table preprocessor to get directory listings in SQL. October 2009

External table enhancements in 11g

Encryption, compression and preprocessing for external tables in Oracle 11g. September 2009

Pl/sql functions and cbo costing

Associating statistics with PL/SQL functions for greater CBO accuracy. June 2009

Avoiding pls-00436 with forall

Workarounds to the FORALL PLS-00436 implementation restriction. July 2005 (updated June 2009)