Skip to Main Content

 
Titelbild Muniqsoft Training

Auswahl  

20 CREATE TABLE Beispiele für Oracle (Version 10.2 bis 21c) 20 CREATE TABLE Examples for Oracle (Version 10.2 bis 21c) ACL (Access Control Lists) bei Oracle APEX 20.2 Backups selbst konfigurieren APEX 21.1 für Oracle XE 18c installieren APEX 23.2 Installation mit minimaler Downtime APEX Datenbank Initialisierungsparameterempfehlungen APEX Neue Funktionen in der Übersicht (ab 21.1) APEX Region Display Selector Status auswerten Abhängige Objekte einer Tabelle anzeigen bzw. neu erstellen Access Control Lists mit dbms_network_acl_admin Archivierung in ein Remote-Verzeichnis Autoincrement Spalten in 12c (Identity) Automatische Triggerwiedereinschaltung Automatischer Start einer Oracle Datenbank unter LINUX/UNIX Berechnung des Segmentfüllpegels Bereinigen der DB-Umgebung mittels ADRCI Besonderheiten des Datentyps LONG Best Practices für das Datenbank-Audit in Oracle 11g und 12c Bind Variable oder Substitutionsvariable? Blobs in Apex CGI Parameter unter APEX auslesen Characterset Migration Compound Trigger zur Vermeidung von Mutating Tables in 11g Crossplatform Migration DBMS_FILE_TRANSFER zum Kopieren von Binär-Dateien DBMS_OUTPUT Tipps DBMS_OUTPUT umgeleitet Das PL/SQL-Berechtigungskonzept in 12c Das Wichtigste rund um Benutzer-Profile Datendateien online verschieben Datumskonvertierungen und Datumsformate in Oracle Debuggen in 12C mit Hilfe des SQL Developers Deklaration von PL/SQL Datentypen Dem Oracle Datenbank-Link auf der Spur Die Neuerungen APEX 5.1 Die WITH-Klausel Die Zukunft ist parallel Die wahre Größe einer Tabelle mit LOB Spalten Dynamic Actions Vorlagen und Beispiele für APEX Dynamic Actions für Reportspalten Dynamisch Netzwerkdateien in SQL auslesen Dynamische Ausführung von Befehlen Einführung in Restore Points Einsatz von After Servererror-Triggern bei dem Troubleshooti Ermittlung der exakten Datenbank Edition Eval Funktion mit Execute Immediate Export Private Reports einen interactive Report in APEX Export von Tabellen als CSV-Files mit UTL_File Export von allen APEX Komponenten Filterung der Alert.log mittels SQL Flashback Funktionen in Postgres Freier Diskspace unter Windows mittels External Table ermitt Frühjahrsputz in der Datenbank Function Based Indices - Spezialfälle Funktion Return Boolean in SQL Problem lösen Gesperrte Schemata in Application Express Geändertes Verhalten bei Datendateifehlern Globale Suche in APEX Hackerangriffe in APEX Import von Bild-Dateien in die Datenbank Index To Rebuilt or not to Rebuilt Index oder nicht, das ist hier die Frage Informationssystem für APEX-Applikationen Inkrementelles Backup und Block Change Tracking mit RMAN Install APEX 21.1 for Oracle XE 18c Installation der Oracle 23ai FREE Edition auf Rocky Linux mi Installation von Oracle 21c Instanzstart Mittels RMAN ohne Parameterdatei Interessante APEX Parameter, die über die Kommandozeile gese Interessantes zum Recycle Bin-Konzept Itemcheck in APEX Anwendungen über alle Items einer Seite JSON Daten extrahieren JSON Umwandlung in realtionales Format mit JSON_TABLE Beispi Keyword in Context (KWIC) mit Oracle Konfigurieren und Nutzen des Oracle Connection Managers Konvertierung von Ref Cursor in dbms_sql Cursor (ab 11g) LISTAGG Alternative mit CLOB Datentyp (und damit 128TB Maxim Lange Laufzeiten bei Zugriff auf DBA_FREE_SPACE oder DBA_EXT Linux Kernel upgraden Linux Shell Skripten in Oracle Tabellen speichern Listener Info mittels SQL auswerten (External Table) Löschen von doppelten Datensätzen Mehrspaltige Ausgabe einer Tabelle Monatskalender in SQL*Plus Mutating Table Problem umgehen mittels zwei Trigger und eine Möglichkeiten die Datendatei eines temporären Tablespace zu Netzwerk Verschlüsselung Neue Klausel in der Create Table Anweisung Neue Online Operationen Neuerungen zu Joins in Oracle Version 12c Nützliche Parameter von SYS_CONTEXT OAUTH2 Authentifizierung mit ORDS 23.1.4 in APEX 23.1 ORDS 22.x Installation in Verbindung mit Oracle APEX ORDS Standalone Installation unter Windows Online Table Redefinition Oracle 12c Datenbank Patchstand abfragen Oracle 18c (Version 18.3) Installation Kurzanleitung Oracle 23ai FREE auf Debian (bookworm) Installation Oracle 23ai FREE on Debian (Bookworm) Installation Oracle 23ai auf Windows WSL Oracle 23ai für Windows Installation Oracle APEX 19.2 installieren für Oracle XE 18c Oracle APEX 20.2 Installation Oracle APEX 20.2 installieren in einer Oracle XE 18c Datenba Oracle APEX 21.2 in Oracle 21c Pluggable Database installier Oracle APEX 25.1 Installation Oracle APEX Export auf Kommandozeile Oracle APEX Friendly URL ab 20.1 Oracle APEX Interactive Grid Javascript Snippets Oracle APEX Interactive Grid Javascript Snippets Oracle APEX Kalender Region mit Jahresauswahl Oracle APEX Patch für 20.1 (30990551) Oracle APEX Variablen im Oracle Trigger auslesen Oracle Arithmetische Funktionen und String Funktionen Oracle Attention.log via Pipelined Table Function auslesen / Oracle Attention.log via Pipelined Table Function read / ana Oracle Constraints nachträglich anlegen Oracle Datenaustausch mit Postgres via REST Oracle Datenbanken herunterfahren Oracle Dokumentationsübersicht von Version 11.2 bis Oracle 2 Oracle Executables unter Windows erklärt Oracle FLASHBACK Oracle Fehler in Win 10 Benachrichtigungen Oracle Fehlermeldungen aus der DB anzeigen Oracle Forms 6i mit Win 10 und Oracle 18 XE Oracle Indexüberwachung Oracle JSON Date Datentyp Problem Oracle Live SQL Oracle ORDS (bis 21.1) Installation für APEX Oracle ORDS (bis 21.4.3.x) Fehler und Lösungsvorschläge Oracle ORDS 22.x-25.x Installation und Fehlerbehebung / ORDS Oracle ORDS 24.x Install mit Apache TomCat 10.1.x oder TomCa Oracle ORDS Check Skript für gängigste Webserver 404 Fehler Oracle ORDS Parameter der Datei defaults.xml Oracle Objekte umbenennen Oracle Rest Benutzer im TomCat Oracle SET Operatoren und Gruppenfunktionen und Unterabfrage Oracle SQL Insert Oracle Text I Oracle Version abfragen Oracle Workspace Manager (Package dbms_wm) Oracle XE 18c Installation (Linux) Oracle XE 18c Installation (Windows) Oracle und JSON PDF Anzeige aus Tabelle in APEX PDF display from table in APEX PL/SQL Collection Beispiele Package UTL_MAIL Parallelisierung von DML - Operatoren mit DBMS_Parallel_Exec Partitionierte Tabellen Beispiele in Postgres Partitionierte Tabellen von Postgres (ab Version 10) Pivoting in 11g - Zeilen zu Spalten PostgreSQL Listener Adresse ändern und Zugriff regulieren Postgres Backup einer Datenbank mit tar Postgres utl_file zum Lesen und Schreiben von Dateien Praktische Aliase unter Oracle / APEX und Tomcat / Apache Prozedur für das Klonen einer Oracle Datenbank Quote Operator REST Beispiele mit apex_web_service RMAN Recover Szenarien inkl. Wechsel der Inkarnation Rebuild von defekten Indizes Rechte direkt oder via Rolle Regular Expression in Oracle (Working Examples) Reguläre Ausdrücke in Oracle Reguläre Ausdrücke in Oracle (Praxisbeispiele) Result Cache SQL Tuning mit SAMPLE und ROWNUM SQL*PLUS Hilfe Erweitern SYSAUX Tablespace verkleinern / reorganisieren Save Linux shell scripts in Oracle tables Schema Export mit EXPDP erzeugt keine Benutzer ? Schutz vor DROP oder TRUNCATE Kommandos Security Scoring Segmenteinstellungen beim Datapump Import Sessions Transaktionen und Sperren Sperren auf Tabellen in einer Oracle Datenbank Spool-file als HTML-Datei ausgeben Statspack ohne Report Statspack optimiert Suche Datensatz in einem Schema Suche nach Bildern und Links in einer APEX Seite TCP Validnode Checking Tablespace Map as ASCII Ausgabe Tablespace Shrink ab 23ai Tablespace Shrink available as of Oracle 23ai Template Substitutions in Apex Tipps zu der Initialisierungsdatei Tipps zur Statistikerstellung in der Datenbank TomCat Logfiles mittels External Table lesen Tooltipps in APEX5.x Tracing mit DBMS_Monitor Trigger Beispiele in Postgres Truncate / Drop Schutz für wichtige Objekte Umbenennen Ihrer Constraints Umbennen von Oracle intervall partitionierten Tabellen (Nach Undo und Temp - Tablespace verkleinern Undokumentierte Funktion zum Abfragen von NULL Werten Unnötige Benutzer in Oracle XE 18c löschen Unsichtbare Spalten Upgrade und Migration einer Non-Container-DB (12.1.0.2) in e Verarbeitung eines dynamischen Selects Vergleich von Tabellen in 10G und 11G II Verzeichnisse Auslesen in PL/SQL Visual Studio Code für Oracle SQL und PL/SQL Wie suche ich in View-Texten? Zeilenbasierte Zugriffskontrolle Zeilenbegrenzung in 12c - Pagination leicht gemacht Übersicht der wichtigsten DDL-Befehle Übersicht der wichtigsten DDL-Befehle (Teil 2) Übersicht der wichtigsten DML Befehle Übersicht der wichtigsten SQL-Befehle Überwachung der Alert-Datei unter Linux Überwachung der Alert-Datei unter Windows
Komplett Übersicht aller Oracle Tipps

Dynamic Actions Vorlagen und Beispiele für APEX 

Oracle
APEX
APEX 21.1:APEX 21.2:RDBMS 12.x
26.07.18 (MP)
05.04.25(MP)
Dynamic Actions, Javascript, APEX

Passende Schulungen zum Thema

Ich habe schon oft versucht Dynamic Actions Vorlagen für APEX im Internet zu finden. Aber es gibt nur sehr wenige und viele sind nicht für den Anwendungsfall passend oder zu kompliziert. Ziel dieses Artikels ist es, einfache Dynamic Action in Oracle APEX als Vorlagen für den täglichen Hausgebrauch zur Verfügung zu stellen.

Fangen wir an...

1.Ein Item soll nach der Eingabe, sofort wieder mit dem Session State synchronisiert werden.
Das bedeutet der Inhalt des Items wird sofort wieder mit der Datenbank, Tabelle wwv_flow_data synchronisiert. Das hat den Vorteil, von einem anderen Item wieder auf den Inhalt des Items über die Notation :Px_ITEM zugreifen zu können.
Voraussetzungen. Ein Text Item (P1_TEXT) existiert in einer Region.

Dynamic Action erstellen:
 Rechte Maus auf P1_TEXT / Create Dynamic Action
 Name: Submit_Val (oder egal)
 Event: On Change
 Selection Type: Item
 Item(s): P1_TEXT
 
 Als True Bedingung:
 Identification
  Action: Execute PL/SQL Code
   PL/SQL Code:
    NULL;
  Items to Submit: P1_TEXT

Fertig. Sobald Sie das Item ändern und verlassen, steht es sofort im Session State zur Verfügung.
 
2. Ein Zweites Item soll erst dann auf der Seite erscheinen, wenn das erste Item mit Inhalt gefüllt wurde:
Wir brauchen dazu ein zweites Textfeld (P1_NAME).

Rechte Maus auf P1_TEXT / Create Dynamic Action
 Name: Show_Name (oder egal)
 WHEN
  Event: On Change
  Selection Type: Item
  Item(s): P1_TEXT
  Client-side Condition
    Type: Item is not null
    Item: P1_TEXT
 
 Als True Bedingung:
  Identification
  Action: Show
  Affected Elements
    Selection Type: Item(s)
    Item(s): P1_NAME
  Execution Options:
    Fire ony Initialization: NO
 Neue False Bedingung: Rechte Maus auf False / Create False Action oder
 auf Show / Create Opposite False Action
 Action: Hide
 Affected Elements
    Selection Type: Item(s)
    Item(s): P1_NAME
 Execution Options:
    Fire on Initialization: YES


Wenn man es noch schöner haben möchte legt man eine weitere True Bedingung fest,
 die den Cursor in das nächste/richtige Item setzt.

  Action: Set Focus
  Affected Elements
    Selection Type: Item(s)
    Item(s): P1_NAME
  Execution Options:
    Fire ony Initialization: NO 

 

3. Sie geben im ersten Item eine Mitarbeiternummer ein und bekommen in einem anderen
Item den Namen des dazugehörigen Mitarbeiters zurück:

Name: Setze_Name (oder egal)
  WHEN
   Event: On Change
   Selection Type: Item
   Item(s): P1_TEXT
 Client-side Condition
    Type: Item is not null
    Item: P1_TEXT
    
Als True Bedingung:
 Identification
  Action: Set Value
  Set Type: SQL Statement
  SQL Statement: SELECT ename FROM emp WHERE empno=to_number(:P1_TEXT);
  Items to Submit: P1_TEXT
 
 Affected Elements
    Selection Type: Item(s)
    Item(s): P1_NAME
 Execution Options:
    Fire ony Initialization: NO

   
4. Beim Klick in eine Textbox, sollen in zwei andere Textboxen neue Werte (mit/ohne Datenbankbezug) eingetragen werden.
Wir brauchen dazu die Textboxen P1_TEXT, P1_NAME und P1_GEHALT

Name: Setze_Werte (oder egal)
 WHEN
  Event: On Click
  Selection Type: Item
  Item(s): P1_TEXT
 
 Als True Bedingung:
 Identification
  Action: Execute PL/SQL Code
  Settings
    PL/SQL Code: /*ohne Datenbank-Bezug */
     :P1_NAME:='MARCO';
   :P1_GEHALT:=9999;
    Items to Return: P1_NAME,P1_GEHALT
    PL/SQL Code: /*mit Datenbank-Bezug */
     SELECT ename,sal
   INTO :P1_NAME,:P1_GEHALT
   FROM emp
   WHERE empno=:P1_EMPNO;
    Items to Return: P1_NAME,P1_GEHALT
    Items to Submit: P1_EMPNO

 

5. Modales Fenster gibt Wert an Hauptfenster zurück:
Wir brauchen dazu eine normale Seite (Seite 1)    
mit einer Textbox (P1_TEXT)
und einem Button (Modal_Fenster)

Ausserdem eine Modale Seite (Seite 2) mit einer Selectliste (P2_EMPS)
und einem Button (Zurueck)

Der Button Modal_Fenster macht einen Redirect auf Seite 2
Auf den Button legen wir eine Dynamic Action

Name: Close_Dialog (oder egal)
 WHEN
  Event: Dialog Closed
  Selection Type: Button
  Button: Modal_Fenster
 
 True Action:
  Identification
    Action: Set Value
  Settings:    
    Set Type: Dialog Return Item
    Return Item: P2_EMPS
  Affected Elements
    Selection Type: Items
    Item(s): P1_TEXT
    
Auf der Modalen Seite:
Die Select Liste hat folgende Query: select ename,empno from emp;
Und der Zurueck Button     verwendet als Action: Redirect to URL
Target: javascript:apex.navigation.dialog.close(true, {'P2_EMPS': '&P2_EMPS!JS.'});


6. Bei einem Doppelklick auf die Textbox P1_ENAME soll der Inhalt dieser Textbox
sofort in die Datenbank zurückgeschrieben werden.


Wir brauchen dazu eine Normale Seite mit zwei Items:
P1_EMPNO vom Typ Hidden
P1_ENAME vom Typ Text Field

Name: Update_table (oder egal)
 WHEN
  Event: Double Click
  Selection Type: Item
  Item(s): P1_ENAME
 
 True Action:
  Identification
  Action: Execute PL/SQL Code
 Settings
 PL/SQL Code:
  UPDATE emp SET ename=:P1_ENAME
  WHERE empno=:P1_EMPNO;
  COMMIT;
 Items to Submit: P1_ENAME


7. Textbox Eingabe in Großbuchstaben umwandeln:


 In der Textbox eintragen unter
Advanced / Custom Attributes: style='text-transform:uppercase'
 
 Trotzdem muss das Item auch nach dem Verlassen in Großbuchstaben gewandelt werden!
 

 Name: TO_UPPER (oder egal)
 WHEN
  Event: Change
  Selection Type: Item
  Item(s): P1_ENAME
 
 True Action:
  Identification
   Action: Execute Javascript Code
  Code
   $x('P1_ENAME').value=$x('P1_ENAME').value.toUpperCase();
  Affected Elements
   Selection Type: Items
   Item(s): P1_TEXT


8. Beim Klick auf ein Button sollen zwei Textfelder geleert werden:
 

Wir brauchen dazu:
Button ("Clear")
Text Feld P1_NAME und P1_TEXT

Gehen Sie mit der rechten Maus auf den Button / Create Dynamic Action
WHEN
  Event: Clear
  Selection Type: Button
  Button: Clear
 
  True Action:
  Identification
   Action:  Clear
  Affected Elements
   Selection Type: Items
   Item(s): P1_TEXT,P1_TEXT 

 Damit das nun nicht aus Versehen ausgewählt wird, bauen wir eine Sicherheitsabfrage ein
 Dazu muss eine weitere True Action erzeugt werden mit einer niedrigeren Sequenz Nummer (z.B. 5)

 True Action:
  Identification
   Action:  Confirm
  Settings
  Text: Wollen Sie wirklich löschen?
  Fire On Initialization: No


 Zum Schluß noch ein paar praktische Javascript Snippets:
 Abfrage mit YES/NO und dem Text "Mitarbeiter löschen?". Bei YES wird REQUEST = DELETE gesendet
 apex.confirm( "Mitarbeiter löschen?", 'DELETE' );
 
 Abfrage mit YES/NO und dem Text "Mitarbeiter löschen?". Bei YES wird REQUEST = DEL gesendet
 und die Items P1_DEPTNO = 10 und P1_EMPNO=7788 gesetzt.
 apex.confirm( "Mitarbeiter löschen?", {
    request: "DEL",
    set: {
        "P1_DEPTNO": 10,
        "P1_EMPNO": 7788
    }
} );

 Submit ausführen mit REQUEST=GO
 apex.submit( "GO" );

9. In einem Tabular Form soll in einer neu hinzugefügten Zeile in einer Spalte immer bereits ein Defaultwert stehen.

Gehen Sie in die Eigenschaften der gewünschten Spalte (bei uns im Beispiel DEPTNO) in den Bereich Advanced / CSS Classes und tragen dort ein:

mydeptno

Der Defaultwert soll aus einem Item stammen mit Namen :P1_DEPTNO

Legen Sie nun eine Dynamic Action auf den "ADD" Button in der Seite, der bei einem Click reagiert:

Event: Click
Selection Type: Button
Button: ADD
True Action:
Action: Execute Javascript
Code:
apex.widget.tabular.addRow();
$(".mydeptno").last().val($v("P1_DEPTNO"));

 

10. In einem Autocomplete Item soll ein Wert eingesetzt werden, der dazu führt das eine Select Liste sich eine neue Query ausführt mit dem Autocomplete Wert als Filter.

Legen Sie dazu ein Autocomplete Item (P1_DEPT) und eine Select Liste an (P1_EMPS)

Die Query für P1_DEPT:

select deptno from dept

Die Query für P1_EMPS:

select ename,empno from emp
where deptno=:P1_DEPT

Legen Sie nun eine Dynamic Action auf P1_DEPT:

Event: Loose Focus
Selection Type: Item(s)
Item: P1_DEPT
True Action: Execute PL/SQL Code
PL/SQL Code:  NULL;
Items to Submit: P1_DEPT
 
Zweite True Action:
Event: Refresh
Selectin Type: Item(s)
Items: P1_EMPS

 

11. Ein Zweites Item soll mit dem ersten Item synchronisiert werden:
Wir brauchen dazu zwei Textfelder (P1_NAME und P1_NAME2).

Rechte Maus auf P1_NAME / Create Dynamic Action

Name: SYNC_Name (oder egal)
 WHEN
  Event: On Change [oder On Key Press]
  Selection Type: Item
  Item(s): P1_NAME
  Client-side Condition
    Type: Item is not null
    Item: P1_NAME
 
 Als True Bedingung:
  Identification
  Action: Set Value
Javascript Expression:
$v("P1_NAME");
  Affected Elements
    Selection Type: Item(s)
    Item(s): P1_NAME2
  Execution Options:
    Fire ony Initialization: NO


12. Automatische Erzeugung eines Primärschlüssels in einem interactiven Grid

Sehr häufig benötigt man eine automatische Generierung eines Primary Schlüssels (Primary Keys) in einer Tabelle
Folgende Möglichkeiten bieten sich hier an:
Tabelle hat einen Before Row Insert Trigger mit einer Sequenz
Tabelle hat eine Identity Spalte (ab 12.1)
PK wird durch APEX mit Hilfe einer Sequenz gefüllt

Wir wollen uns den letzten Fall ansehen
a., Erstellen Sie einen interactiven Grid auf Ihrer Tabelle (bei uns die EMP Tabelle)
b, Erstellen Sie eine Sequenz:

create sequence emp_seq start with 8000;

c, Erstellen Sie auf der Spalte EMPNO im Grid (rechte Maustaste, Create Dynamic Action) eine neue Dynamic Action

Event: Row Initializiation
Name: Erzeuge_PK
Selecion Type: Column
Column: EMPNO
Client Side Condition:
Type: Item/ Column is in List
Component Type: Column
Column: EMPNO
List: t1000,t1001,t1002,t1003,t1004,t1005,t1006,t1007,t1008,t1009
Anmerkung: Damit können bis zu 10 Zeilen auf einmal eingetragen werden, das sollte normalerweise reichen :-)

True Action (1):
Action: Enable
Selection Type: Column
Column: EMPNO

True Action (2):
Action: Set Value
Set Type: SQL Statement
SQL Statement: SELECT emp_seq.nextval FROM dual;
Selection Type: Column
Column: EMPNO

True Action (3):
Action: DISABLE
Selection Type: Column
Column: EMPNO

und noch eine weitere Dynamic Action vom Typ:
Event: Report Change [ Interactive Grid]
Name: Disable_PK_Col
True Event
Action: DISABLE
Selection Type: Column
Column: EMPNO
Fire on Initialization: Ja!!

Nun passiert folgendes:
Bei jeder neu eingefügten Zeile im Grid wird kurz der Spaltenschutz aufgehoben,
dann wird aus der Sequenznummer eine neue Nummer in die Zeile eingetragen,
danach wird die Spalte wieder gegenüber Änderungen geschützt.