Continuing the series on joins, I’m going to look at denormalization. This process reduces the number of joins necessary to return results for a schema.
One of the big arguments against normalizing data is “for performance”. The process of normalization creates new tables as relations are decomposed according to their functional dependencies. This means (more) joins are necessary to return the same results.
It’s possible to get an error after granting privileges to an external file system. One of those errors is tedious to resolve until you understand the rules governing Java NIO file permissions.
You grant privileges to external file systems as the
sys user with the
grant_permission procedure of the
dbms_java package, like
SQL> BEGIN 2 DBMS_JAVA.GRANT_PERMISSION('IMPORTER' 3 ,'SYS:java.io.FilePermission' 4 ,'C:\Data\Upload' 5 ,'read' (more...)
-- Anlage einer Tabelle mit einer einzigen Spalte (vom Typ TEXT)
create table my_log(log_line text);
-- Einlesen via copy-Kommando
-- Parsen der Eingabe-Strings mit Hilfe der Funktion split_part in beliebig viele Abschnitte
-- „Split string on delimiter and return the given field (counting from one)“
select split_part(log_line, (more...)
Joins appear (to me) to be getting a lot of bad press recently. In discussions I’ve had and articles I’ve read many give the position that joins are somehow inherently bad and to be avoided at all costs.
I’ve never been entirely convinced by the “joins are bad” arguments however. Partly because there’s few concrete cases actually demonstrating the (additional) cost of joins. Instead discussions tend to be hand-wavy arguments around extra CPU cycles used (more...)
- Auf LOBs basierende virtual columns mit zugehörigen Indizes. Dabei wird das Ergebnis des Funktionsaufrufs im Index gehalten, aber in der Tabelle erscheint nur die Funktionsdefinition, so dass Oracle bei der Statistikerstellung den Funktionsaufruf für jede Zeile ausführen muss - und wenn (more...)
Here is an example of surprising behaviour from a remote DB from an OTN forum thread
Setup a link to a remote DB (I’ve used an actual remote DB and not tested a loopback)
create table t1 (col1 varchar2(1));
create or replace view v1 as select count(*) c1 from t1@l1;
Then alternate variations on this sequence of events:
1. On local DB execute SELECT:
SELECT * FROM v1;
2. On remote (more...)
I watched in horror as the updated application was deployed to the test server. The application was fine, having been subjected to the first test by the developers, but the deployment process was bad. There were various home-built utilities to run with very specific parameters in order to build the deployment package that would then be semi-automatically installed on the test server. It took a new developer a whole day and 20-30 attempts to build (more...)
|I like puns|
They have a buy one get one free offer but it ends today - (more...)
I subscribe to Microsoft Office 365 and had a payment stuck on an expired credit card. Even though there was a new card, the billing system kept trying the old one.
In a modern cloud service, I would open a service request and expect things to be handled for me. But this is Microsoft. And with the arrogance of the monopolist they used to be, they require you to please show up when they feel (more...)
It was certainly worth watching the videos in the end because (more...)
Packt Publishing has a “buy one, get two” offer that runs until Wednesday. If you don’t have my ADF books, this would be a great opportunity to buy my new book Oracle ADF Enterprise Application Development – Made Simple: Second Edition and get a free copy of Developing Web Applications with Oracle ADF Essentials (or the other way around
The following update forms the basis of a DIY connection pool. It is intended to allocate an unused session to whoever requests it:
declare sess connection_pool.session_name%type; begin update connection_pool set in_use = 'Y', last_used = systimestamp where rowid in ( select rowid from ( select rowid from connection_pool where in_use = 'N' order by last_used ) where rownum = 1 ) returning session_name into sess; dbms_output.put_line ( sess ); (more...)