Eine Abfrage Kombination mit CASE, basierend auf einer listagg-Funktion hat in einer PL/SQL Funktion zum ORA-06502 geführt. Und das obwohl der gleiche Code in reinem SQL problemlos funktionierte. select case when anz_le = 0 then …
Weiterlesen »Kategorie: SQL
Komma-Separated list für IN-Klausel
Auf https://blogs.oracle.com/aramamoo/how-to-split-comma-separated-string-and-pass-to-in-clause-of-select-statement wird erklärt, wie man in einer WHERE … IN Klausel eine String-Variable nutzen kann. Ein noch besseres Beispiel funktioniert so: with test as (select ‚KART,KART-SPG,PAL‘ col from dual) select regexp_substr(col, ‚[^,]+‘, 1, level) …
Weiterlesen »Anzeigen der Kardinalität in Toad
Die Cardinality lässt sich in Toad anzeigen, indem man den optimizer hint /*+choose */ Verwendet. Dies ist erforderlich, wenn der Cost Based Optimizer nicht verwendet wird: https://docs.oracle.com/cd/B10500_01/server.920/a96533/hintsref.htm#11753
Weiterlesen »Suche nach Daten mit unterschiedlichen Attributen für einen gemeinsamen Oberbegriff
Um aus einer Tabelle mit Auftragspositionen diejenigen zu finden, die bei gleicher Auftragsnummer einen unterschiedlichen Status auf Positionslevel haben, verwendet man eine analytische Funktion wie folgt: SELECT * FROM ( SELECT COUNT (DISTINCT status) OVER …
Weiterlesen »Co-related Subqueries vermeiden
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 »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 »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 »