ORACLE External Table – Dynamic Access Generator » Syntax kurz erklärt

ORACLE External Table – Dynamic Access Generator » ORACLE External Table – Zugriff dynamisch aus der Data Dictionary Table: COL generieren



CTPM » Business • Health • Travel • Move - Stefan Müller CTPM » Business • Health • Travel • Move - XING CV - Stefan Müller

Autor: Stefan Müller CEO & Senior Consultant

CTPM » Business • Health • Travel • Move

Köln • Berlin • Hamburg • Lindlar im Bergischen Land



1. ORACLE External Table



1.1 %TYPE

/*

Thema: External Table - Zugriff dynamisch aus COL generieren
-- Drop ..
-- Create table ... organization external
-- create or replace view

Autor: Stefan Müller

*/

declare
v_quelle varchar2(50) := 'XSC_Q.CSV';
v_target varchar2(30) := 'TARGET_TAB';
v_table varchar2(30) := 'NEW_'||v_target;
v_dir varchar2(30) := 'IMPORT';

v_col clob;
v_coltype clob;

rec_rc SYS_REFCURSOR;
v_rc_sql clob := 'select * from col where tname = '''||v_target||''' order by colno';
v_rec col%rowtype;

-- Basis - DDL-Syntax
v_sql clob :=
'drop table <<tab>>;'||chr(10)||
'create table <<tab>>'||chr(10)||
'('||chr(10)||
'<<coltype>>'||
')'||chr(10)||
'organization external'||chr(10)||
'('||chr(10)||
' type ORACLE_LOADER'||chr(10)||
' default directory <<dir>>'||chr(10)||
' access parameters '||chr(10)||
' ('||chr(10)||
' RECORDS DELIMITED BY NEWLINE'||chr(10)||
' SKIP 1'||chr(10)||
' FIELDS TERMINATED BY '';'''||chr(10)||
' missing field values are null'||chr(10)||
' ('||chr(10)||
'<<col>>'||
' )'||chr(10)||
' )'||chr(10)||
' location (<<dir>>:''<<quelle>>'')'||chr(10)||
')'||chr(10)||
'reject limit UNLIMITED;'||chr(10)||
''||chr(10)||
'create or replace view V_<<tab>>'||chr(10)||
'('||chr(10)||
'<<col>>'||
')'||chr(10)||
'as select '||chr(10)||
'<<col>>'||
'from <<tab>> et;'||chr(10);
begin
-- Directory ersetzen
v_sql := replace(v_sql,'<<dir>>',v_dir);
-- CSV-Quelle ersetzen
v_sql := replace(v_sql,'<<quelle>>',v_quelle);
-- Tabelle ersetzen
v_sql := replace(v_sql,'<<tab>>',v_table);
open rec_rc for v_rc_sql;
loop
fetch rec_rc into v_rec;
exit when rec_rc%notfound;
if rec_rc%rowcount = 1 then
v_col := v_rec.cname||chr(10);
v_coltype := v_rec.cname||' varchar2(100)'||chr(10);
else
v_col := v_col||','||v_rec.cname||chr(10);
v_coltype := v_coltype||','||v_rec.cname||' varchar2(100)'||chr(10);
end if;
end loop;
close rec_rc;
-- Spalten exkl. Type ersetzen
v_sql := replace(v_sql,'<<col>>',v_col);
-- Spalten inkl. Type ersetzen
v_sql := replace(v_sql,'<<coltype>>',v_coltype);
dbms_output.put_line (v_sql);
end;

--
-- <<quelle>> --> Dateiname im Directory
-- <<tab>> --> Tabellenname
-- <<col>> --> Spalten - Kommasepariert
-- <<coltype>> --> Spalten & Type - Kommasepariert
--

Ergebnis: SAMPLE

drop table NEW_TARGET_TAB;
create table NEW_TARGET_TAB
(
COL1 varchar2(100)
,COL2 varchar2(100)
,COL3 varchar2(100)
)
organization external
(
type ORACLE_LOADER
default directory IMPORT
access parameters
(
RECORDS DELIMITED BY NEWLINE
SKIP 1
FIELDS TERMINATED BY ‚;‘
missing field values are null
(
COL1
,COL2
,COL3
)
)
location (IMPORT:’XSC_Q.CSV‘)
)
reject limit UNLIMITED;

create or replace view V_NEW_TARGET_TAB
(
COL1
,COL2
,COL3
)
as select
COL1
,COL2
,COL3
from NEW_TARGET_TAB et;


 

 ctpm.events 📅 
 Anzeige 

Oracle und PL/SQL sind eingetragene Warenzeichen der Oracle Corporation.


Datenbank & Internet

IT-Seminare, Kurse, Workshops oder Stammtisch


Ihre Fragen und Anmerkungen sind jederzeit willkommen.

(Link)

Schreibe einen Kommentar

%d Bloggern gefällt das: