It’s all about the interface

When we talk about program design we're mainly talking about interface design. The interface is the part of our program that the users interact with. Normally discussion of UI focuses on GUI or UX, that is, the interface with the end user of our application.

But developers are users too.

Another developer writing a program which calls a routine in my program is a user of my code (and, I must remember, six months after (more...)

Working with the Interface Segregation Principle

Obviously Interface Segregation is crucial for implementing restricted access. For any given set of data there are three broad categories of access:

  • reporting 
  • manipulation 
  • administration and governance 

So we need to define at least one interface - packages - for each category in order that we can grant the appropriate access to different groups of users: read-only users, regular users, power users.

But there's more to Interface Segregation. This example is based on a procedure (more...)

PL/SQL Fehlerbehandlung

Ja, es ist richtig: meine Einträge hier werden in letzter Zeit kürzer und kürzer. Daran werde ich aber auch heute nichts ändern, denn eigentlich will ich gerade nur einen Link unterbringen: Steven Feuerstein listet in seinem Artikel Nine Good-to-Knows about PL/SQL Error Management- nun ja: neun interessante Punkte auf, die man beim Exception Handling in PL/SQL berücksichtigen sollte. Zu den wichtigsten Hinweisen gehören aus meiner Sicht:
  • "An exception raised does not automatically roll back (more...)

Deploying from Developer Cloud Service to Oracle Application Container Cloud Example

Fabrizio Marini shows you step by step how to develop and deploy a Java SE application on the Oracle Application Container Cloud with direct deployment form Oracle Developer Cloud Service

Check out his blog entry that details:

  1. how to create an application with Tomcat Embedded (7.x) using Eclipse & Maven
  2. how to use datasource and database connection with Tomcat Embedded & Maven
  3. how to use local maven repository to install/get Oracle Jdbc drivers
  4. (more...)

Analytics in APEX Charts – Moving Average

Consider a chart with a trend that might be quite jagged across data points (blue line).

What if you would like a smoother version of that line - a moving average, if you will (red line). This stabilises the results, like looking at climate vs weather.
Oracle APEX Line Chart - 2 series
It's fairly easy from a SQL point of view - in this case it's another column in the original chart query

#DB12c feature – Secure External Procedures with DBMS_CREDENTIAL

Oracle Database 12c enables enhanced security for extproc by authenticating it against a user-supplied credential. This new feature allows the creation of a user credential and links it with a PL/SQL library object. Whenever an application calls an external procedure, the extproc process authenticates the connection before loading the shared library. The DBMS_CREDENTIAL package is … Continue reading

Begriffsbestimmung: deprecated und desupported

Mike Dietrich erklärt die Unterschiede der Konzepte deprecated und desupported:
Deprecated is a signal that something may disappear in the future and does not get enhanced anymore. No activity required except of taking note for your future plans. Desupported means that we don't fix anything anymore for a desupported feature or product - and it may even disappear. But often desupported features are still there and can be used on your own risk only.
Diese (more...)

4 Keys to Succeeding with Agile Data Warehousing in 2016

I have been out giving talks again on using agile methods for data warehouse and business intelligence projects, so I thought it was time for me to share my thoughts about the 4 key elements you need to be successful with an Agile DW project in 2016. Adopt an Agile Methodology By this I am talking […]

About CSS Selectors

Recently I saw a simple, accepted answer in the forums that tempted me to provide a small extension to the provided answer. This has since spawned two blog post ideas, here is the first.


The following question asked how to hide the spinner from a particular page full of small reports refreshed on a timer.
The answer was some basic CSS, which could be placed in a variety of locations depending (more...)

BIG checkboxes

Getting older, it’s getting harder to see and click those tiny checkboxes…



input[type=checkbox] {
/* Double-sized Checkboxes */
-ms-transform: scale(2); /* IE */
-moz-transform: scale(2); /* FF */
-webkit-transform: scale(2); /* Safari and Chrome */
-o-transform: scale(2); /* Opera */


CAN YOU SEE THEM NOW? Ah, good. That’s all right then.

Brought to you by dept-of-coding-by-copy-and-paste.

Filed under: APEX Tagged: APEX, CSS, tips-&-tricks

Parameter Vorschläge in 12c

Vor ein paar Wochen hatte Mike Dietrich (in seinem ausgesprochen lesenswerten Blog zu den Themen upgrades and migrations) einen Artikel mit interessanten Parameter-Vorschlägen für 12c veröffentlicht, diesen aber rasch wieder aus dem Verkehr gezogen, weil es anscheinend Oracle intern gewisse Unstimmigkeiten darüber gab, ob man z.B. den Einsatz von underscore Parametern (außerhalb von Support-Fällen) überhaupt als Lösungen für Performance-Probleme vorschlagen sollte. An Stelle dieses initialen Artikels (dessen Vorschläge mir ausgesprochen plausibel vorgekommen waren) hat der (more...)

Temporal validity, multiple end dates

Recently I got involved in a question on Temporal Validity Periods together with Chris Saxon, one of the askTom-answer team.

The question was along the lines of: "What if I have a single start date but two possible end dates. One of the end dates is filled automatically by a background proces (could be a job) while the other one is to signal that the end date is set manually by the user. Could you (more...)

Designing PL/SQL Programs: Series home page

Designing PL/SQL Programs is a succession of articles published the articles in a nonlinear fashion. Eventually it will evolve into a coherent series. In the meantime this page serves as a map and navigation aid. I will add articles to it as and when I publish them.


Designing PL/SQL Programs

Principles and Patterns

Introducing the SOLID principles
Introducing the RCCASS principles
The Dependency Inversion Principle: a practical example

Software Architecture

Interface design

Tools and Techniques

The Dependency Inversion Principle: a practical example

These design principles may seem rather academic, so let's look at a real life demonstration of how applying Dependency Inversion Principle lead to an improved software design.

Here is a simplified version of an ETL framework which uses SQL Types in a similar fashion to the approach described in my blog post here. The loading process is defined using an abstract non-instantiable Type like this:

create or replace type load_t force as object
( txn_date (more...)

Oracle TranslationHub neither supported for 12c Database, 12c Forms/Reports or 64 bit!

If you need TranslationHub (Windows only) for your forms and reports development and plan to move to one of the following

  • 12c Database for your TranslationHub repository
  • 12c Forms/Reports (only available for 64 bit Windows)
  • higher version of 64 bit 11g Forms/Reports

then please immediately stop! None of this combination works with TranslationHub!

For the last point I had created enhancement request 14155931 back in June 2012!

For the first point I had created a service request (more...)

SQL Analytics in every day APEX

Looking for way to apply analytical functions to your APEX applications?

I had a classic report where I wanted to dynamically source the column headers from counts in the database (values in brackets).

The ability to do this has been a feature of APEX for a while, but this was the first time I did it in APEX 5.0.

Customise headers via Region attributes
With Connor's recent spate of analytics videos,  I thought (more...)

Full Table Scan in umgekehrter Block-Reihenfolge

Für mich völlig neu war der folgende Hinweis aus dem aktuellen Quiz-Artikel von Jonathan Lewis: mit Hilfe des - undokumentierten - Events 10460 kann man dafür sorgen, dass ein Full Table Scan des Blocks einer Tabelle in absteigender Reihenfolge liest, also beginnend mit dem letzten Block der Tabelle. Unter bestimmten Umständen könnte dieses veränderte Verhalten nützlich sein, etwa um ora-1555-Fehlern aus dem Weg zu gehen. Aber da das Event nicht dokumentiert ist, gehört das (more...)

OUGN Spring Conference 2016

I'm back after one of the best ocean voyages ever - the OUGN Spring Conference 2016. That conference is arranged by Oracle User Group Norway and is two days from Thursday before lunch-time to Saturday before lunch-time. The special thing is, that it all happens on board a cruise ship that uses 20 hours to sail from Oslo, Norway to Kiel, Germany - stays in Kiel 4 hours - then 20 hours to sail back. (more...)

A new law of office life

I posted my Three Laws of Office Life a long while back. Subsequent experience has revealed another one: Every office kitchen which has a sign reminding people to do their washing-up has a concomitant large pile of unwashed crockery and dirty cutlery.

People wash their own mug and cereal bowl, but are less rigorous with the crockery from the kitchen cupboard. This phenomenon will be familiar to anybody who has shared a house during their (more...)

Introducing the RCCASS design principles

Rob C Martin actually defined eleven principles for OOP. The first five, the SOLID principles, relate to individual classes. The other six, the RCCASS principles, deal with the design of packages (in the C++ or Java sense, i.e. libraries). They are far less known than the first five. There are two reasons for this:

  • Unlike "SOLID", "RCCASS" is awkward to say and doesn't form a neat mnemonic. 
  • Programmers are far less interested in (more...)