Posts

Es werden Posts vom 2022 angezeigt.

Umgang mit Triggern - To Trigger or not to Trigger

Ein interessanter Artikel von Jürgen Sieben im RedStack-Magazin 05-2022 S.24ff Fazit: Vermeidung von Triggern durch SQL Identity-Column GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity_options ) ] Für Dimensionen gern genommen: GENERATED BY DEFAULT ON NULL AS IDENTITY erzeugt eindeutige ID, erlaubt aber feste Singleton (-1 für nicht definiert) vorzugeben. oder default Klausel CREATE TABLE tst ( --> Es können Sequence-Werte genutzt werden. &nbsp&nbsp&nbsp&nbsp d_id NUMBER DEFAULT detail_seq.NEXTVAL, &nbsp&nbsp&nbsp&nbsp m_id NUMBER DEFAULT master_seq.CURRVAL, --> Es können Contexte genutzt werden. &nbsp&nbsp&nbsp&nbsp ax_usr varchar2(32 char) DEFAULT SYS_CONTEXT ('APEX$SESSION', 'APP_USER'), &nbsp&nbsp&nbsp&nbsp db_usr varchar2(32 char) DEFAULT S

Statistiken entsperren / ORA-20005: object statistics are locked (stattype = ALL)

Aktueller Fall: Nach dem Import eines Schemas aus einer anderen Datenbank (per DataPump) waren alle Tabellen und Daten wie gewünscht vorhanden. Die Statistiken wurden vom alten System übernommen. Dies ist grundsätzlich auch sinnvoll, da die Daten ja unverändert übernommen wurden. Hier waren aber "frische" Statistiken gewünscht. Problem: Es wurden keine neuen Statistiken erstellt. Die Prüfung hat ergeben, dass die übernommenen Statistiken gelocked waren ( stattype_locked = 'All' ). Eine einfache Neuerstellung meldete: ORA-20005: object statistics are locked (stattype = ALL) . Nach dem Entsperren mit dbms_stats.unlock_schema_stats lief die Neuerstellung problemlos durch. Hier der Code dazu: -- Prüfen, ob Statistiken gelocked sind (= stattype_locked nicht leer) select table_name, stattype_locked from user_tab_statistics; -- Statistiken ggfs. entsperren exec dbms_stats.unlock_schema_stats('abc');

How to Read an Execution Plan

Eine kurze Einführung von Chris Saxon zu Execution Plans: https://blogs.oracle.com/connect/post/how-to-read-an-execution-plan

Farbschemata entwickeln / anpassen

Eine tolle Webseite rund um Farbgebung findet sich hier: https://encycolorpedia.de/ Über https://encycolorpedia.de/html kann man direkt benannte html-Farben suchen. Die Liste ist sortierbar nach Farbton, Sättigung und Leichtigkeit. Durch anklicken der Farben bekommt man weitere Vorschläge zu Abstufungen und Komplementärfarben . Am Beispiel " lightyellow " sieht man, wieviel Zusatzinformationen hier geliefert werden.

APEX: Interactive Grid - Spaltengrupppen und einfärben

Zum individuellen Einfärben eines Interactive Grids (IG) bieten sich die Möglichkeiten von CSS an. Zum Färben eines konkreten IG bekommt dieses zur Identifikation eine Static_ID : Advanced / Static ID: Px_IG Sollen alle IGs identisch gefärbt werden, kann dieser Step entfallen. Im CSS sind mehreren Ebenen des IG zu behandeln: Header-Gruppe Header Spalten - allgemein Spalten - readonly Seiten-Ebene Die wesentlichen Definitionen werden auf Seiten-Ebene als Inline-CSS festgelegt: PageX (oberster Knoten) / CSS / Inline /* Spaltengruppen */ #P4_IG .a-GV-headerGroup[data-idx="1"] { background-color: khaki; } /* Edit-Modus: nichtänderbarer Text trotzdem in schwarz (= besser lesber) eigentlich: ALLE Zellen mit Textfarbe schwarz */ #P4_IG .a-GV-cell { color: black; } /* Farbschema-Gruppe 1 - zum Einfärben bestimmter Spalten */ #P4_IG .fs_grp1 { background-color: khaki; } /* Edit-Modus: Hintergrundfarbe für den änderbaren Text */ #P4_IG .fs_grp_edit {

APEX: DB-Name und Umgebung anzeigen

Bei Mehrsystem-Umgebungen ist es für Entwickler und Tester hilfreich, sofort zu sehen, auf welcher Datenbank und Umgebung man arbeitet. Wir nutzen dazu zwei Application Items , die per Application Computations - On New Instance (new session) - initialisiert werden: P_DB select SYS_CONTEXT ('USERENV', 'DB_NAME') DB from dual P_UMGEBUNG select case substr(SYS_CONTEXT ('USERENV', 'DB_NAME'),-1) when 'E' then 'Entwicklung' when 'A' then 'Abnahme' when 'P' then null else 'unbekannt' end Env from dual Beide Werte finde sich an folgenden Stellen wieder: App-Titel User Interfaces / Logo App-Name <span style="color: yellow"> >&P_UMGEBUNG.<</span> Anwender@Datenbank Application Definition / Version &APP_USER.@&P_DB. Version 0.0.1 Login-Page Identification / Title App-Name<br>- &P_UMGEBUNG. - Damit ist immer erke

APEX: Interactive Grid im Edit-Modus starten

Ein Interactive Grid in APEX ist sehr flexibel. Es läßt sich leicht an diverse Bedürfnisse anpassen. Ein (störender) Punkt ist, dass es per default im Anzeigemodus startet. Erst ein Doppelklick startet die Bearbeitung, was bisweilen umständlich ist. Eine Lösung ist die Aktivierung des Edit-Mode bei Laden der Seite. Hierzu bekommt das IG eine Static ID , z.B. Px_IG. Über eine dyn. Action für das Event "Page Load" wird per Javascript der Edit-Mode aktiviert. apex.region("Px_IG").call("getActions").set("edit", true); That's it 🙂 Quelle: https://tm-apex.blogspot.com/2020/07/automatically-activate-edit-mode-on.html

APEX - Status Meter Gauge - Farbschema

Für das Status Meter Gauge mit 3 Zonen (Rot - Gelb - Grün) hat sich folgendes Farbschema bewährt: Quelle Farbdarstellung: https://encycolorpedia.de zu finden weiter unten im Abschnitt: "Farbtöne und Schattierungen" => Hintergrund jeweils das "heller" => Balken jeweils das "dunkler" Farbe Standard heller dunkler Link Rot ff0000 ff5232 d11507 https://encycolorpedia.de/ff0000 Gelb ffff00 ffff52 d0d015 https://encycolorpedia.de/ffff00 Grün 008000 469536 0f6a08 https://encycolorpedia.de/008000 ...für die APEX-Felder schaut das dann so aus: Abschnitt Source SQL-Quelle: select 'GZE-Ist' LABEL -- Label , 50 VAL_MIN -- Min , 100 VAL_SET -- Wert für "Reference Line" , IST_GZE VAL_ACT -- aktueller Wert , 125 VAL_MAX -- Max , case when IST_GZE < 75 then '#d11507' -- Rot statt '#FF0000' w

APEX: (Lösch-) Button im Classic Report

Zum Löschen von Zeilen direkt aus einem Classic-Report gibt es mindestens zwei Varianten:  Löschen per Submit Dyn.Actions Version mit Submit benötigt: hidden item für die ID der zu löschenden Spalte auf der Seite eigene "Löschen"- Spalte im Report PL-Process für das eigentliche Löschen Im Detail: hidden item (hier: P2_ID_DEL) als Variable für Lösch-Process Lösch-Spalte als Link formatieren Target Typ URL mit Ziel javascript:apex.confirm("Diese Simulation löschen?", {request:"DEL_SIM", set:{"P2_ID_DEL":#GZE_SIM_KOPF_KEY#}}); Erläuterung: Bei Bestätigung der Rückfrage mit "OK" wird ein Submit mit dem Request DEL_SIM ausgelöst. Zuvor wird das HIDDEN ITEM "P2_ID_DEL" mit dem Wert der Spalte #GZE_SIM_KOPF_KEY# gesetzt (= PK der Zeile, die gelöscht werden soll). Button mit Text Link Text: Löschen Link Attributes: class="t-Button t-Button--simple t-Button--ho

APEX: Read-Only Items ändern, ohne session state protection violation

Beim Ändern eines Item's per Dyn.Actions kann es zur session state protection violation kommen. Eine Lösung ist, dieses Item in ein hidden item mit Value Protected = OFF zu ändern. Wenn das Item sichtbar sein soll: Ein weiteres Item Px_ID_DISP erstellen (Display Only + Send on Page Submit = off) und Wert übernehmen. Quelle: https://www.traust.com/set-value-without-violating-session-state-protection-in-oracle-apex/