Schlecht ist es mit einer sub-query mehrfach auf die gleiche Tabelle zuzugreifen, z.B.: select * from auftrag where auftrag_amt = (select max(auftrag_amt) from auftrag) Besser ist die Verwendung einer inline view: select * from auftrag …
Weiterlesen »Kategorie: Oracle
Rechnen mit Datums- und Zeitwerten
–Umwandeln eines 5-stelligen Datums in ein lesbares Format: select to_char( to_date(‚1899-12-30‘, ‚YYYY-MM-DD‘) + 41293, ‚YYYY-MM-DD‘) from dual; –2 Stunden zur aktuellen Zeit hinzufügen: SELECT systimestamp, systimestamp + INTERVAL ‚2‘ HOUR FROM DUAL; –Erster Tag des …
Weiterlesen »Zeitdifferenz berechnen
Hier z.B. eine Auswahl von Datensätzen bei denen zwischen dwh_validto und dwh_validfrom weniger als ein Stunde vergangen ist: SELECT * FROM <TABLE_NAME> WHERE round((CAST(dwh_validto AS DATE) – CAST(dwh_validfrom AS DATE)) * 24 * 60) < …
Weiterlesen »Kill-Statements erzeugen
Bei mehreren parallel laufenden Prozessen ist es nützlich, wenn man kill-Statements erzeugen kann, die für eine Parent SQL-ID die passenden SQLs liefert. –unten bei vs.sql_id die sql_id ändern !!! SELECT ‚ALTER SYSTEM KILL SESSION …
Weiterlesen »Tablespace kalkulieren mit PL/SQL
function get_tablespace_tbl RETURN t_table IS l_table t_table := t_table (); BEGIN SELECT t_record (TABLE_SPACE, used_mb, free_mb, total_mb, max_mb, pct_free, max_pct_free) BULK COLLECT INTO l_table FROM ( SELECT fs.tablespace_name AS TABLE_SPACE, (DF.TOTALSPACE – FS.FREESPACE) as USED_MB, …
Weiterlesen »SQL für Informationen im CLOB Feld
Falls man nach Informationen in einem CLOB Feld sucht, funktioniert das nicht mit einer normalen WHERE-Klausel in Verbindung mit LIKE oder INSTR. Als Workaround kann man mit dbms_lob.substr gezielt Daten rauskopieren, z.B.: select * from …
Weiterlesen »Trace und TKProf
Um aufzudecken was innerhalb einer Session passiert, kann man sie „tracen“. Dazu gibt man folgende Kommandos auf der Befehlszeile in SQLPLUS ein: alter session set timed_statistics=true; Session wurde geändert alter session set events ‚10046 trace …
Weiterlesen »Wochen-Nummer in SQL-Abfrage
In Abhängigkeit vom Format innerhalb der TO_CHAR Funktion kann es sein, dass für den 31.12.2017 die 52 oder die 53 als Kalenderwoche geliefert wird. Z.B.: select to_char(TO_DATE(‚31.12.2017‘, ‚dd.mm.yyyy‘), ‚IW‘) from DUAL; –52 select to_char(TO_DATE(‚31.12.2017‘, ‚dd.mm.yyyy‘), …
Weiterlesen »Differenzen bei INNER JOIN vs. WHERE EXISTS
Normalerweise kann man davon ausgehen, dass ein WHERE EXISTS in einer SQL-Abfrage die gleiche Datenmenge zurückliefert wie der entsprechende JOIN. Das funktioniert allerdings nur dann, wenn man für beide Varianten einen Schlüssel verwendet, der eindeutig …
Weiterlesen »Tabellendefinition für eine Fremdtabelle im ODI Datenmodell
Die Tabellendefinition für eine Fremdtabelle im ODI Datenmodell findet man über das ODI Workrepository. Darin befindet sich die Tabelle SNP_COL. Über deren Spalte kann man sämtliche Tabellenfelder finden. Z.B.: select * from ODI_WORK_REPO_DEV_D.snp_col where I_TABLE …
Weiterlesen »