Posts

Unterschiedliche Detaillevel im Report

Herausforderung: Ein Report soll unterschiedliche Detaillevel anzeigen. Die Beispiel-Tabelle: drop table fs_t1; create table fs_t1 ( ddd number, ddd_vgl number, wert_B number, wert_S number, ziel number ); insert into fs_t1 values (1, 1, 10, 15, 20); insert into fs_t1 values (2, 2, 20, 25, 31); insert into fs_t1 values (2, 12, 20, 25, 32); insert into fs_t1 values (3, 13, 30, 35, 40); insert into fs_t1 values (3, 3, 30, 35, 40); commit; select ddd, ddd_vgl,wert_B, wert_S, ziel from fs_t1; DDD DDD_VGL WERT_B WERT_S ZIEL ---------- ---------- ---------- ---------- ---------- 1 1 10 15 20 2 2 20 25 31 2 12 20 25 32 3 13 30 35 40 3 3 30 35 40 5 rows selected. Zu DDD 2 gibt es zwei unterschiedliche Vergleichs-DDD's mit unterschi...

OWB mit aktuellem JRE starten

Vorgehen, um den OWB unter Windows mit aktuellem JAVA zu starten: !!! Wichtig: keine Ahnung, ob das Supportet ist, daher alles ohne Gewähr!!! 1) Aktuelles JRE installieren 2) Im OWB-Home (Bsp: C:\Programme\owb1020\owb\bin\win32) - Sicherungskopien der Datei owbclient.bat erstellen - Sicherungskopien der Datei setowbenv.bat erstellen 3) in Datei setowbenv.bat zwei Zeilen ändern: - Zeile set JAVAPATH= (Bsp.: set JAVAPATH=C:\Programme\Java\jre6) - Zeile set JDK_HOME= (Bsp.: set JDK_HOME=C:\Programme\Java\jre6) - Rest belassen 4) in Datei owbclient.bat folgenden Eintrag ändern: - %JAVAPATH%\jre\bin\java auf ändern (Bsp.: %JAVAPATH%\bin\java) - Rest belassen 5) OWB-Start über owbclient.bat Hintergrund: Mit "seinem" JRE hat sich der OWB nach kurzer Zeit stark mit sich selbst beschäftigt: Bei jedem Maus-Klick - CPU-Auslastung von 100% und totale Blockade des Rechners. Mit dem aktuellen JRE ist das Verhalten bisher nicht aufgetreten.

SQL: isol. und kummulierte Werte ermitteln

Um in Reports isolierte und kummulierte Werte parallel anzuzeigen, läßt sich die analytische Funktion von Oracle nutzen: select QUARTAL, PK_ID, Anz_AKT, sum(Anz_AKT) over (partition by PK_ID, ceil(QUARTAL/10) order by QUARTAL) Anz_KUM from ( select F.PK_ID, F.QUARTAL, sum(F.ANZ_FAELLE) Anz_AKT from FACT_TBL F where F.PK_ID in ('123') group by F.QUARTAL, F.PK_ID, ); Der innere select liefert die je Quartal zusammengefassten Werte, die im äußeren select innerhalb des Jahres ( ceil(quartal/10) ) aufsummiert werden. Das Ergebnis ist z.B. folgende Liste: QUARTAL PK_ID ANZ_AKT ANZ_KUM 20021 6410220 9810 9810 20061 6410220 1719 1719 20062 6410220 3819 5538 20063 6410220 3827 9365 20064 6410220 4233 13598 20081 6410220 1168 1168 Innerhalb eines jeden Jahres werden die Werte aufsummiert. So können mit einer Abfrage elegant isol. und kum. ...

OWB, Outer Join und between

Heute aufgetreten: Der OWB hat Schwierigkeiten einen Outer Join mit einem between (Bsp. SCN2 oder ähnlich) sauber umzusetzen: Konkret wurden "tAc2 >= tBc2(+)" und "tAc2 WICHTIG: KLAMMER setzen -> dann klappt' auch mit dem OWB! Bsp: where tAc1 = tBc1(+) and ( tAc2 between tBc2(+) and tBc3(+) ) oder where tAc1 = tBc1(+) and ( tAc2 >= tBc2(+) and tAc2

Abfrage von Partitionen

Per select * from Tbl_Name partition ( Name_der_Partition); Bsp.: select * from BASIS_VO partition (P20083); kann man direkt eine bestimmt Partition abfragen. Wichtig: Für Oracle ist "BASIS_VO partition (P20083)" der Tabellenname, d.h. der Alias muss DAHINTER : select * from BASIS_VO partition (P20083) A where A.HNR = 1234;

Umgebungsvariablen per Script setzen

Für's einfacherere Handling von mehreren Oracle-Home's auf einem Server hat es sich bewährt, alle benötigten Umgebungsvariablen in entsprechende Scripte zu packen und bei Bedarf aufzurufen. source ~/env_ora102SE.sh Der Inhalt eines solchen Scriptes könnte z.B. wie folgt aussehen: export ORACLE_BASE=/d01 #export ORACLE_BASE=/opt/oracle/ export ORACLE_HOME=/opt/oracle/product/10gR2SE export NLS_LANG=german_germany.we8iso8859p15 export NLS_DATE_FORMAT="dd.mm.yyyy hh24:mi:ss" export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib export PS1='[\u@\h \W]\$ ' alias ll='ls -lhtr' alias o='set|grep ORA' alias ora='ps -ef|grep [ao][sr][ma]_;ps -ef|grep oraclef' alias plus='sqlplus / as sysdba' alias sv1='export ORACLE_SID=sv1' Im unteren Teil sind einige Aliase definiert, die das Abfragen der aktuellen Umgebung oder den Aufruf einiger Programme deutlich vereinfachen.

Explain Plan und DBMS_XPLAN

(für Oracle 10gR2) Installation sqlplus / as sysdba drop table plan_table; @?/rdbms/admin/utlxplan create public synonym plan_table for plan_table; grant all on plan_table to public; Weitere Informationen zum Explain Plan ( http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm#i26143 ) bzw. bei Tom Kyte ( http://asktom.oracle.com/tkyte/article1/autotrace.html ) Plan Table per DBMS_XPLAN.DISPLAY anzeigen 1) explain plan Kommando für einen SELECT Befehl ausführen: EXPLAIN PLAN FOR SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno AND e.ename='benoit'; 2) Anzeigen per DBMS_XPLAN.DISPLAY Tabellenfunktion: SET LINESIZE 130 SET PAGESIZE 0 SELECT * FROM table(DBMS_XPLAN.DISPLAY); Ergebnis-Bsp: Plan hash value: 3693697075 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 |...