Zur Anbindung an ein ERP / PPS System benötige ich innerhalb von Drupal und PHP Zugriff auf eine Oracle Datenbank. Da mehr und mehr kleine Projekte / Auswertungen innerhalb des Intranet aufbereitet und bereitgestellt werden, musste ich irgendwann an eine Optimierung denken. Ich habe die Anbindung an die Oracle Datenbank auf jeder benötigten Seite immer eigenständigen PHP-Code realisiert und teilweise unterschiedliche Funktionen als auch wiederholenden Quellcode eingesetzt.
Zur Zentralisierung habe ich dann ein relativ einfaches Drupal Module Names oracle_helper erstellt, welches eine einfach API und eine Verwaltung für SQL-Abfragen bereithält.
Da ich keinen CVS Account für Drupal.org habe und das Module sicherlich nicht unbedingt für die Breite Masse geeignet ist, kann man das Module nur direkt aus meiner SVN-Verwaltung auschecken. (SVN Websvn / SVN: oracle_helper Module
Adminbereich und Abfragen
Über den Adminbereich von Drupal können die Oracle typischen Verbindungsoptionen und SQL-Queries direkt verwaltet werden. Zur besseren Verwaltung von SQL-Abfragen lassen sich diese über interne Namen abspeichern und direkt nutzen. Natürlich können auch direkt SQL an die Funktion übergeben werden. Innerhalb des Adminbereiches können aus Sicherheitsgründen nur SELECT-Statements genutzt werden. Zur Erstellung von SQL-Abfrage kann die gleiche Syntax ähnlich der db_query Funktion von Drupal genutzt werden.
Installation
Zur Installation einfach die üblichen Drupal Methoden und Anleitungen nutzen. Nach Aktivieren des Module steht im Adminmenü einer neuer Menüpunkt bereit (Administer > Site configuration > Oracle Helper). Hier müssen die Verbindungsoptionen zum Oracleserver angegeben werden. Ein richtig installiertet Oracle Client muss ebenfalls vorhanden sein. Infos und Probleme hierzu habe ich hier zusammengefasst. Eventuelle Fehlermeldungen beim Connecten oder bei SQL-Abfragen werden über den watchdog im Fehlerprotokoll von Drupal abgelegt.
API Beispiel: Interne Abfrage
Innerhalb der Adminoberfläche haben wir eine Abfrage erstellt mit dem Namen artikel_suche. Diese können wir direkt ansprechen. Innerhalb dieser Abfrage gebrauchen wir Modizifiers wie %s und übergeben deren Wert per Paramter an die Funktion oracle_helper_db_query, so erhalten wir sichere SQL Ausdrücke. Schließlich lassen wir uns den Rückgabewerte als Tabelle ausgeben.
#read internal query
$query = oracle_helper_get_internal_queries('artikel_suche');
#perform db_query callback
$query = oracle_helper_db_query($query, 'artikelusereingabe');
#get return values as array
$ar = oracle_helper_perform_query($query);
#output table use first result as table headers
echo theme('table', array_keys($ar[0]), $ar);
