Skip to content

Blog

Defining code coverage scope with regular expressions in utPLSQL-cli

A coverage report is only useful when the information it provides is meaningful.

Useful information would be: "How much of MY application code is covered by tests?"

Until now, obtaining precise coverage for your project with utplsql-cli was only possible by mapping project files into database objects or by providing a complete list of objects to include or exclude when gathering coverage.

Since version 3.2.2, utplsql-cli lets you describe the scope of the coverage report with regular expressions, so the included/excluded scope follows your naming conventions instead of an object list.

Incorporation of utPLSQL

In August, I wrote on utPLSQL site, that utPLSQL needs a clear vision for its future, and that the project cannot keep going on after-hours goodwill alone. This is the first concrete step in that direction. In August 2026 I incorporated utPLSQL Development Labs Ltd in Cyprus, where I now live, and utPLSQL is moving under its custody.

Before I explain what that means, let me explain how a unit testing framework for PL/SQL ended up needing a company at all.

Testing for exceptions with --%throws

Throwing exceptions is a common practice of handling situations when the program meets unsupported combination of data or conditions. Oracle PL/SQL language provides several mechanisms for raising and capturing exceptions.

utPLSQL provides the --%throws annotation that allows for verification of expected exceptions. Exception testing in utPLSQL is done through this annotation, not through ut.expect(...).

utPLSQL starter tips - Annotations configure tests

You configure utPLSQL test suite in special comments — called annotations — right inside the PL/SQL package specification.

Annotations are comment lines starting with --%. They tell the framework what is a suite, what is a test, what procedures need to be called for setup or cleanup logic. The framework reads them at runtime so no extra configuration is needed.

utPLSQL starter tips - creating test suite

Testing PL/SQL code does not need to mean writing throwaway scripts or using a complicated graphical user interface.

utPLSQL gives you a proper test framework — right inside database.

A utPLSQL test is just a package annotated as --%suite with procedures annotated as --%test. The framework finds them automatically.

BUG in INSERT ... SELECT with nested objects

I came across a very nasty bug in Oracle SQL engine while working on some new code. It took me a while to figure out what the problem is as the SQL code I was working on was acting weird. The work was related to refactoring and consolidating an existing code. As part of the effort we aimed to achieve two things. First, simplify the code and second, improve performance. The code was already there and it was very well tested with unit tests using utPLSQL. Test cases covered all the join conditions and all column transformations done as part of delivered functionality. Thanks to the testing, we've managed to capture the issue while developing new code. It took me quite some time and head scratching to figure that it's actually an oracle bug. Creating an isolated test-case to reproduce the unexpected behavior really helped. With that I could confirm with 100% certainty that it's not coding issue but an actual BUG. I must mention that within my ~20 years of career as an SQL and PL/SQL developer I've never seen a bug like that.