Inside Oracle APEX auf Deutsch (von Patrick Wolf)

Neuer Oracle APEX Podcast

Lewis Cunningham von ITToolbox hat einen Podcast zum Thema Oracle APEX erstellt. Mit dabei sind David Peak (Oracle APEX Product Manager) und Peter Martin (ein APEX Benutzer).

Hört es Euch an! "The Buzz about Oracle APEX"

Update: Habe gerade gesehen, dass der Dimitri eine Zusammenfassung des Podcasts veröffentlicht hat.

Labels: , ,


« ... Ganzen Artikel lesen ... »

Das Mysterium Outer Join

In meinen vielen Jahren die ich jetzt schon mit Datenbanken/Oracle arbeite, ist mir aufgefallen, dass viele Leute Probleme mit Outer Joins haben. Besonders wenn die Outer Join Tabelle noch eine zusätzliche Einschränkung haben soll.

Vor ein paar Tagen habe ich einen guten Artikel zu dem Thema im Blog vom Jeff's gelesen - aber Warnung, es handelt sich um einen MS SQL Server Blog ;-) - Der Artikel heißt Criteria on Outer Tables und enthält gute Beispiele welche das Problem erklären.

Übrigens, wenn Ihr noch wenig mit dem "neuen" ANSI Join Style zu tun gehabt habt, dann schaut Euch mal die Artikel Serie am Eddie Awad's seinem Blog an, wo er über die verschiedenen ANSI Join Styles schreibt.

Labels: ,


« ... Ganzen Artikel lesen ... »

Oracle APEX Builder Plugin jetzt auch für den Internet Explorer!

Das Oracle APEX Builder Plugin ist jetzt auch für den Internet Explorer verfügbar!

Schon bereits seit einer längeren Zeit suche ich für den Internet Explorer ein Äquivalent zu Greasemonkey. Es wäre ja nicht so, dass ich nichts gefunden hätte, da gibt es Greasemonkey für IE, Trixie oder Turnabout. Aber leider werden diese Add-on's nicht mehr wirklich aktiv weiterentwickelt. In den meisten Fällen wurde die Entwicklung bereits vor mehr als einem Jahr eingestellt und die Homepages sagen nicht wirklich aus ob sie auch mit dem Internet Explorer 7 funktionieren oder nicht.

Aber am Samstag habe ich zum Glück IE7Pro gefunden, welches den IE 6/7 unterstützt. Und die gute Nachricht ist, dass es aktiv weiterentwickelt wird. Es hat auch noch ein paar andere nette Features, aber ich war primär am Scripting Feature interessiert.

Nachdem ich gestern mein Greasemonkey APEX Builder Plugin Script angepasst habe, bin ich jetzt stolz Oracle APEX Builder Plugin Version 1.6 ankündigen zu dürfen, welches sowohl den Internet Explorer als auch den Firefox Browser unterstützt!

Internet Explorer Benutzer können jetzt die selben Produktivitäts- und Ergonomieverbesserungen im Oracle APEX Builder genießen, wie bereits zuvor die Firefox Benutzer. Das wäre zum Beispiel
Neue Version herunterladen und der HowTo Install Datei für die notwendigen Installations- und Konfigurationsschritte folgen.

Labels: , , , ,


« ... Ganzen Artikel lesen ... »

Die Oracle APEX Blog Community wächst und wächst!

Die Oracle APEX Blog Community wächst und wächst. In den letzten paar Wochen wurden 7 neue Blogs zum Thema Oracle APEX gestartet.

Schaut Euch mal die Blogs von
an.

Willkommen an Bord!

Labels: , ,


« ... Ganzen Artikel lesen ... »

Arikel zu Oracle APEX welche Ihr lesen solltet

In den letzten Tagen wurden ein paar Artikel mit Bezug zu Oracle APEX veröffentlicht, welche Ihr lesen solltet.

Labels: , , ,


« ... Ganzen Artikel lesen ... »

Neue Version der Migration Workbench verfügbar

Habe gerade im Blog von Donal Daly's gelesen, dass eine neue Version der Migration Workbench verfügbar ist.

Wenn Ihr noch nicht von der Migration Workbench gehört habt, das ist ein Tool welches dazu verwendet werden kann eine MS Access/SQL Server/MySQL Datenbank nach Oracle zu migrieren.

Labels: , , , ,


« ... Ganzen Artikel lesen ... »

Was ist eure Lieblings PL/SQL Entwicklungs IDE?

Meine ist der PL/SQL Developer von allroundautomations.

Warum?

Weil es ein PL/SQL Entwicklungstool mit einem Fokus auf PL/SQL Entwicklung ist. Die meisten anderen Tools wie TOAD oder SQL Developer (welche ich bereits auch in der Vergangenheit verwendet habe) haben gute DBA/Abfrage Funktionalität, aber versagen kläglich von einem "State of the Art" Programmierer Standpunkt.

Sicher, alle haben einen PL/SQL Editor mit "Auto Replace" und "Template" Unterstützung. In der Zwischenzeit kann man mit dem SQL Developer auch schon eine Datei basierende PL/SQL Entwicklung machen. In einer der ersten Version konnten nur Packages aus der Datenbank bearbeitet werden. Könnt Ihr Euch eine Professionelle Entwicklung vorstellen wo der Code nur in der Datenbank gespeichert ist?!?! Ich nicht! Das war damals für mich ein Killer Kriterium es nicht zu benutzen - auch wenn es gratis war.

Also was ist jetzt besser am PL/SQL Developer, verglichen zu TOAD und SQL Developer?

Es ist die Code Vervollständigung/Code complete/code insight/auto complete oder wie auch immer die IDEs es nennen und was man inzwischen von modernen Java/.Net/... IDEs gewöhnt ist. Jetzt werden viele sagen: "Hey, TOAD und SQL Developer können das auch!". Ja das stimmt, aber nur die "Basic" Variante mit Vervollständigung für Tabellen/Views.

Die Code Vervollständigung von der ich rede kennt den PL/SQL Code den Ihr geschrieben habt. Sie funktioniert für lokale Variablen, Packages, Prozeduren der Packages, Parameter dieser Prozeduren, ... Wenn Ihr Euch daran gewöhnt Alt+Leerzeichen zu drücken um das Geschriebene zu Vervollständigen, dann kann das Eure Entwicklungsgeschwindigkeit wirklich erhöhen!

Und da spreche ich noch nicht von den anderen Features wie "Refactoring", Variablen Hervorhebung und so weiter. Oder zum Beispiel den Integrierten Compiler, welcher Euch nicht verwendete Variablen/Parameter oder nicht dem Styleguide entsprechende Schreibweise anzeigt. Schaut es Euch einfach mal selbst an.

Wenn Ihr aktuell den TOAD verwendet, dann kann es am Anfang ein wenig gewöhnungsbedürftig sein, wenn Ihr auf die neue IDE wechselt, da das Fenster Handling anders aufgebaut ist und im SQL Fenster ein Beistrich nach jedem SQL Statement benötigt wird.

Aber es ist es wirklich wert - aus Sicht eines PL/SQL Entwicklers - ein DBA sollte bei seinem TOAD/SQL Developer bleiben.

Übrigens, ich werde nicht für diesen Artikel bezahlt :-) Bin einfach ein zufriedener Benutzer dieses Tools und sehe viel zu oft unproduktive PL/SQL Entwicklung mit den falschen Tools.

Labels: ,


« ... Ganzen Artikel lesen ... »

Oracle APEX Builder aufmotzen

Einer der Nachteile der neuen "Web-Welt" ist, dass die meisten Web Seiten/Applikationen nicht wirklich mit der Tastatur bedient werden können. Es gibt keine Tastenkürzel um verschiedene Aktionen wie "Änderungen speichern", ... auszulösen. Es muss dazu immer die Maus verwendet werden. Was von einem Ergonomie Gesichtspunkt nicht ganz so optimal ist...

Die Oracle APEX Entwicklungsumgebung leidet an dem gleichen Problem, da sie ja selbst mit APEX geschrieben ist und daher auch im Web läuft. So gibt es zum Beispiel keine Tastenkombination um "Apply Changes", "Run the page", usw. auszulösen. Aber, hier kommt die Rettung der Produktivität und Ergonomie! ;-)

Ich dachte mir, es wird mal wieder Zeit für eine neue Version des Oracle APEX Builder Plugin's, besonders weil es ja jetzt auch sein eigenes Sourceforge Projekt hat.

Was ist jetzt neu in dieser Version?

Zuallererst habt Ihr jetzt die Möglichkeit Tastenbelegungen für Buttons, Links, Tabs oder Felder zu definieren. Ich habe bereits ein paar generelle Tastenbelegungen definiert, aber es ist Euch überlassen diese zu ändern.
  • F8 um die Seite auszuführen.
  • F10 für "Apply Changes". Hinweis: "Apply Changes" muss für andere Sprachen in der Konfigurationsdatei angepasst werden!
  • Strg+Cursor-Links um zur vorherigen Seite/Seiten Feld/Spalte zu navigieren.
  • Strg+Cursor-Rechts um zur nächsten Seite/Seiten Feld/Spalte zu navigieren.
  • Auf der "Report Definition" Seite kann Alt+1, Alt+2, Alt+3 verwendet werden um die verschiedenen Tabs zu aktivieren.
Im Dokument HowTo Install gibt es weitere Informationen wie man die Tastenbelegungen definieren kann.

Eine weitere Erweiterung verwendet auch die Tastatur. Auf Seiten mit "Tabular Forms" Darstellung, wie zum Beispiel "Bulk update page items", kann jetzt Cursor Up/Down dazu verwendet werden zwischen den Zeilen zu navigieren.

Die dritte Erweiterung erlaubt es ein Hintergrundbild oder die Farbe Eures APEX Builders zu ändern. Damit ist es zum Beispiel möglich anzuzeigen, dass man sich auf dem Produktionssystem befindet. Schaut Euch den Beispiel-Screenshot an, den ich basieren auf der Beispielkonfiguration der Release gemacht habe.

Du brauchst diesen Hintergrund nicht? Einfach die entsprechenden Zeilen aus config\apex_builder_plugin.js entfernen.

Noch nie das Oracle APEX Builder Plugin verwendet?

Dann schaut Euch mal die ganzen anderen Funktionen an.

Plugin herunterladen und den Installations- und Konfigurationsschritten des HowTo Install Dokuments folgen!

Änderungshistorie der neuen Version
  • CR# 1699530: Plugin should also support checkbox fields
  • CR# 1717258: Change Background color/Image of APEX Builder IDE
  • CR# 1717896: Allow keyboard shortcuts for buttons and links
  • CR# 1717798: Add cursor up/down support for tabular forms


Labels: , ,


« ... Ganzen Artikel lesen ... »

Drucker freundliches Layout

Ich habe ein paar neue CSS Styles zu meinem Blog Layout hinzugefügt, welche alle Grafiken und die Sidebar entfernen wenn ein Artikel gedruckt wird. Damit sollte das ganze jetzt wesentlich Drucker freundlicher sein.

Viel Spass beim drucken!

Labels:


« ... Ganzen Artikel lesen ... »

Top Oracle Blogs

Eddie Awad hat heute eine Liste der Top Oracle Blogs Ranked by Technorati Authority veröffentlicht.

Ich bin am 17. Platz! :-)

Zur Zeit bin ich gleich auf mit IT-eye. Kann bitte jemand noch einen Link auf meinen Blog erstellen, damit ich sie überhole ;-)

« ... Ganzen Artikel lesen ... »

URL in einem neuen Fenster öffnen

Ihr wollte einen Button oder einen Navigationslisteneintrag erstellen welcher einen URL in einem neuen Browser Fenster öffnet?

In reinem HTML würdet Ihr normalerweise einfach
<a href="http://url/" target="_blank">

schreiben. Aber wie kann man das target="_blank" in Oracle APEX angeben, wenn es nur die Eigenschaft "URL Target" gibt, in der man nur einen URL eingeben kann?

Sicher könnte man sich auch mit ein wenig Javascript Code behelfen um ein neues Fenster zu öffnen. Hört sich aber ein wenig kompliziert für so eine einfache Aufgabenstellung an, oder? Es muss auch einen einfacheren Weg geben!

Es gibt ihn auch!

Ihr könnt die gleiche Technik wie für eine SQL Injection verwenden. Einfach
http://url/" target="_blank
in die "URL Target" Eigenschaft schreiben. APEX fügt dann das schließende Hochkomma nach _blank hinzu, den es denkt der URL endet dort. Auf diesem Weg generiert APEX ein gültiges a href Tag mit einem target.

Labels: , ,


« ... Ganzen Artikel lesen ... »

Ein Gantt-Chart mit SQL erstellen

For ein paar Tagen hat Lucas Jellema von AMIS ein wirklich interessantes und nettes SQL Statement auf seinem Blog beschrieben mit dem es möglich ist ein Character based Gantt-Chart zu erstellen.

Ich finde das demonstriert wieder mal sehr gut die unendlichen Möglichkeiten und die Flexibilität von SQL. Schaut es auch an!

Labels: , , ,


« ... Ganzen Artikel lesen ... »

Nette Erfolgsgeschichte zu APEX

Bin gerade über dem Herod seinem Blog gestolpert auf dem er eine nette Erfolgsgeschichte zu einer APEX Migration erzählt.

Labels: , ,


« ... Ganzen Artikel lesen ... »

Neues Blog Layout

Wie Ihr vielleicht bemerkt habt habe ich das Layout meines Blogs geändert. Ich habe mir gedacht es wird Zeit, dass mein Blog sein eigenes Layout hat und nicht eines der Standard Layouts von Blogspot verwendet.

Einer der Vorteile des neuen Layouts ist, dass es sich an die Breite des Browser Fensters anpasst und daher mehr Platz für die Artikel zur Verfügung stehen sollte, besonders auf großen Bildschirmen. Das stört mich zum Beispiel an vielen Blogs, dass sie noch immer auf 800x600 optimiert sind, weil ja die Standard Templates das so vorgeben und dadurch kaum Platz für den Artikel zur Verfügung steht, der halbe Bildschirm aber leer bleibt...

Ich würde mich über Feedback freuen, ob das neue Layout auch auf den verschiedenen Browsern und Betriebsystemen ok aussieht, denn wenn Ihr Euch vielleicht schon ein wenig mit CSS herumgespielt habt, dann hattet Ihr sicher auch schon ein paar Alpträume davon.

Wenn es unter Firefox gut aussieht, dann könnt Ihr sicher sein, dass es der IE 7 anders darstellt. Und wenn es dann mit diesem Browser auch passt, dann stellt es der IE 6 sicher wieder anders dar... Safari, Opera und wie sie alle heißen haben sicher auch ihre eigene Vorstellung vom CSS "Standard".

Jedenfalls viel Spass mit dem neuen Look and Feel!

« ... Ganzen Artikel lesen ... »

SMS an ein Handy schicken

Heute habe ich einen Artikel im Grant Rolands seinem Blog über SMS from Oracle Forms through a Web-Service gelesen.

Ich habe mir gedacht, es wäre nett so etwas auch in Oracle APEX und PL/SQL zu haben. Kann man ja für Eskalationen oder System Fehler, ... verwenden.

Grant verwendet ein Web-Service von Esendex, aber ich bin mir sicher es gibt genügend andere SMS Gateway Anbieter. Google liefert jedenfalls einige Angebote für Deutschland. Zuerst habe ich mir gedacht ich verwende auch das angebotene Web-Service und schreibe einen PL/SQL Wrapper dafür oder ich verwende die Web-Service Funktion von APEX.

Aber ich habe mich dann dafür entschieden die einfache HTTP POST Version zu verwenden, welche auch von Esendex angeboten wird. Gründe? Warum soll ich mir das ganze Java rundherum antun und es nur unnötig kompliziert und fehleranfällig machen wenn es einfach auch geht. Die APEX Web-Service Funktion konnte ich nicht verwenden, weil ich das ganze ja auch von PL/SQL zum Beispiel in einem Batch-Job verwenden wollte.

Der Code ist eigentlich sehr einfach. Holt Euch ein Gratis Konto, ersetzt die Konstanten in der Beispiel Prozedur und los geht es!

Hinweis: Wenn Ihr einen Proxy habt, dann müsst Ihr den Kommentar für die Proxy Zeile entfernen. Es gibt auch eine sicherere Version mit HTTPS, aber die benötigt wieder ein Wallet, ... eigentlich wollte ich ja nur zeigen wie einfach es ist und das es funktioniert. Die Fehlerbehandlung in der Prozedur könnte sicher auch noch verbessert werden, aber das ganze soll ja nur ein Grundgerüst sein! :-)

Viel Spass beim aufwecken Eurer Bereitschaft/DBAs in der Nacht! ;-)

Um eine SMS zu schicken, einfach die Prozedur mit
BEGIN
sendSMS('+436991812345','this is a test');
END;
aufrufen.

Nachfolgend die Beispiel Prozedur:
CREATE OR REPLACE PROCEDURE sendSMS
( pRecipient IN VARCHAR2
, pBody IN VARCHAR2
)
IS
ESENDEX_USERNAME CONSTANT VARCHAR2(40) := 'your_username';
ESENDEX_PASSWORD CONSTANT VARCHAR2(40) := 'your_password';
ESENDEX_ACCOUNT CONSTANT VARCHAR2(40) := 'your_account';
--
vRequest Utl_Http.req;
vPostText VARCHAR2(500);
vResponse Utl_Http.resp;
vResponseText VARCHAR2(2000);
vErrorText VARCHAR2(200);
BEGIN
----------------------------------------------------------------------------
-- Build text for the post action.
-- For a field description, see
-- http://www.esendex.com/secure/messenger/formpost/SendSMS.aspx
----------------------------------------------------------------------------
vPostText :=
'EsendexPlainText=YES' ||CHR(38)||
'EsendexUsername=' ||Utl_Url.escape(ESENDEX_USERNAME, TRUE)||CHR(38)||
'EsendexPassword=' ||Utl_Url.escape(ESENDEX_PASSWORD, TRUE)||CHR(38)||
'EsendexAccount=' ||Utl_Url.escape(ESENDEX_ACCOUNT, TRUE)||CHR(38)||
'EsendexRecipient='||Utl_Url.escape(pRecipient, TRUE)||CHR(38)||
'EsendexBody=' ||Utl_Url.escape(pBody, TRUE);
----------------------------------------------------------------------------
-- if you need to set a proxy, uncomment next line.
----------------------------------------------------------------------------
/* Utl_Http.set_proxy('proxy.it.my-company.com', 'my-company.com'); */
----------------------------------------------------------------------------
-- Send SMS through the Esendex SMS service.
----------------------------------------------------------------------------
vRequest := Utl_Http.begin_request
( url => 'http://www.esendex.com/secure/messenger/formpost/SendSMS.aspx'
, method => 'POST'
);
Utl_Http.set_header
( r => vRequest
, name => 'Content-Type'
, value => 'application/x-www-form-urlencoded'
);
Utl_Http.set_header
( r => vRequest
, name => 'Content-Length'
, value => LENGTH(vPostText)
);
Utl_Http.write_text
( r => vRequest
, data => vPostText
);
vResponse := Utl_Http.get_response(vRequest);
IF vResponse.status_code = '200'
THEN
Utl_Http.read_text(vResponse, vResponseText);
--
IF vResponseText NOT LIKE 'Result=OK%'
THEN
vErrorText := vResponseText;
END IF;
ELSE
vErrorText := 'HTTP status: '||vResponse.status_code||'-'||vResponse.reason_phrase;
END IF;
--
Utl_Http.end_response(vResponse);
--
IF vErrorText IS NOT NULL
THEN
RAISE_APPLICATION_ERROR(-20001, 'Sending SMS failed with '||vErrorText);
END IF;
END sendSMS;


Labels: , , , ,


« ... Ganzen Artikel lesen ... »

Lock Konflikte bei Automatic Row Processing (DML) Prozessen

Oracle APEX 3.0 beinhaltet ein nettes neues Feature das Ihr kennen solltet. Es gibt eine neue "Substituation Variable" APEX_DML_LOCK_WAIT_TIME welche dazu verwendet werden kann um das Verhalten der "Automatic Row Processing (DML)" und der ApplyMRU/D Prozesse zu definieren, wenn ein verarbeiteter Datensatz in der Datenbank bereits gelockt ist.

Mit der Standardeinstellung wartet APEX ewig, oder so lange bis der Datensatz wieder freigegeben wird. Das Schlechte daran ist, dass Benutzer normalerweise nicht so lange warten sondern den Abbrechen Button im Browser drücken und die Änderungen erneut an den Server schicken und wieder schicken und wieder schicken. Und jedesmal wird dabei eine neue Datenbankverbindung aus dem Connection Pool verwendet, welche niemals dorthin zurückgegeben wird, weil sie ja beim Lock hängenbleibt. Wenn man sich das genauer überlegt, könnte man damit sicher eine interessante Denial-of-Service Angriffsmethode entwickeln, aber das ist eine andere Geschichte...

Wie kann so eine Locking Situation aussehen?

Zum Beispiel wenn Ihr eine Datenbank habt auf deren Daten auch von einer Oracle Forms Applikationen oder jede andere Client/Server Answendung zusätzlich zur APEX Anwendung zugegriffen wird.

Für solche Anwendungen ist es meistens normal, dass sie eine pessimistische Locking Strategie implementiert haben. Das bedeutet, dass der Datensatz sofort gelockt wird wenn der Benutzer anfängt die Daten zu ändern. APEX und die meisten Web Anwendungen verfolgen eine optimistische Locking Strategie.

Locks können auch entstehen wenn man lange laufende Batch Jobs hat die nur selten ihre Änderungen speichern.

Welche Einstellung soll ich verwenden?

Ich würde vorschlagen in jeder Applikation die "Substitution Variable" auf 0 zu setzen. Unabhängig ob man obiges Szenario hat oder nicht. Ein Wert von 0 bedeutet, dass sofort eine Fehlermeldung ausgegeben wird wenn ein Datensatz gelockt ist.

Weitere Einstellungen können in der Online Dokumentation im Kapitel About DML Lockings nachgelesen werden. Weitere Hintergrund Informationen findet Ihr im zugehörigen OTN Forums Thread.

Labels: , , ,


« ... Ganzen Artikel lesen ... »