Mit Oracle 11g R2 ist es möglich bei Einlesen von externen Tabellen ein Pre-Processing (Skript) zwischen zu schalten.
Die Anwendungsbereiche innerhalb des Skriptes sind vielfältig z.B. Daten komprimieren, modifizieren, etc. oder schlicht dieses Feature dazu nutzen, Skripte auszuführen und den Output weiterzuverarbeiten.
Beispiel:
create directory list_dir as ‚/tmp‘;
grant read, write on directory list_dir to testuser;
create directory execdir as ‚/tmp‘;
grant execute on directory execdir to testuser;
–drop table directory_listing;
create table directory_listing
(
permission char(10),
owner char(8),
gruppe char(8),
mod char(12),
filename char(100)
)
organization external
(
type oracle_loader
default directory list_dir
access parameters
(
records delimited by newline
preprocessor execdir:’list.sh‘
skip 1
load when (permission != blanks)
fields
(
permission position (01:10),
owner position (15:22),
gruppe position (24:31),
mod position (40:51),
filename position (53:120)
)
)
location (‚list.sh‘)
)
reject limit unlimited
/
—
— select from this table
—
select * from directory_listing;
PERMISSION OWNER GRUPPE MOD FILENAME
———- ——– ——– ———— ——————————————————————————————
…
-rw-rw-rw- root root Feb 20 13:18 blup
…
56 rows selected.
—
— Inhalt list.sh
—
#!/bin/ksh
/bin/ls -la /tmp