Hallo,
ich stehe vor der Aufgabe, dass meine PHP Anwendung neben MySQL in Zukunft auch Oracle unterstützen soll. Ich habe bereits alle Datenbank-Funktionen in ein externes Include ausgelagert, und würde dieses dann auch für Oracle anpassen. So kann die Anwendung später bei der Einrichtung entweder MySQL oder Oracle verwenden.
Jetzt mein Problem:
Die SQL-Anweisungen setze ich natürlich nicht in diesem Include zusammen. Ich habe in meiner Anwendung Oft diesen Fall:
In diesem Beispiel habe ich zwei der bisher identifizierten Probleme eingebaut:
1. Das Datum muss bei Oracle immer mit TO_DATE() übergeben werden. Alle Datums-Query's müssten angepasst werden. Oder doch nicht?
2. Oracle kennt keine LIMIT Anweisung. Stattdessen soll ROWNUM verwendet werden. Laut diversen Google-Ergebnissen klappt das aber nicht in Verbindung mit ORDER BY, weil dann nicht die sortierten Ergebnisse limitiert werden. Alle Lösungen bauen den Query komplett um
Ich kann nicht die ganze Anwendung doppelt anpassen.
Ich hab mir mal Datenbank-Frameworks angesehen, die angeblich von DB Unterschieden abschirmen sollen. Sie scheinen aber keine Lösung für meine Probleme darzustellen. Oder hab ich was übersehen?
Ich bin bereit, alle betroffenen Querys in der Anwendung umzubauen, aber ist das nötig? Weiterhin möchte ich dann nicht jeweils zwei Query's hinterlegen müssen. Am besten wäre eine Notation für alle Fälle.
Eine Idee:
Hier würde ich Datumsangaben und eine LIMIT Klausel per Funktion anbauen. Für Oracle macht DBDate() dann eben den TO_DATE() hin und für MySQL nicht. Aber wie mache ich das mit LIMIT?
Bin gerade etwas Ratlos und verfluche Oracle immer öfter...
Donald
ich stehe vor der Aufgabe, dass meine PHP Anwendung neben MySQL in Zukunft auch Oracle unterstützen soll. Ich habe bereits alle Datenbank-Funktionen in ein externes Include ausgelagert, und würde dieses dann auch für Oracle anpassen. So kann die Anwendung später bei der Einrichtung entweder MySQL oder Oracle verwenden.
Jetzt mein Problem:
Die SQL-Anweisungen setze ich natürlich nicht in diesem Include zusammen. Ich habe in meiner Anwendung Oft diesen Fall:
PHP-Code:
$SQL = "SELECT * FROM tbltesttabelle
WHERE LastActivity > '2010-03-27 23:59:59'
ORDER BY LastActivity
LIMIT 10";
$db = new classDBOpen($SQL);
while($ROW = $db->fetchObject()){
// do domething with the records
}
1. Das Datum muss bei Oracle immer mit TO_DATE() übergeben werden. Alle Datums-Query's müssten angepasst werden. Oder doch nicht?
2. Oracle kennt keine LIMIT Anweisung. Stattdessen soll ROWNUM verwendet werden. Laut diversen Google-Ergebnissen klappt das aber nicht in Verbindung mit ORDER BY, weil dann nicht die sortierten Ergebnisse limitiert werden. Alle Lösungen bauen den Query komplett um

Ich hab mir mal Datenbank-Frameworks angesehen, die angeblich von DB Unterschieden abschirmen sollen. Sie scheinen aber keine Lösung für meine Probleme darzustellen. Oder hab ich was übersehen?
Ich bin bereit, alle betroffenen Querys in der Anwendung umzubauen, aber ist das nötig? Weiterhin möchte ich dann nicht jeweils zwei Query's hinterlegen müssen. Am besten wäre eine Notation für alle Fälle.
Eine Idee:
PHP-Code:
$SQL = "SELECT * FROM tbltesttabelle
WHERE LastActivity > " . DBDate("2010-03-27 23:59:59") . "
ORDER BY LastActivity " . DBLimit(10);
Bin gerade etwas Ratlos und verfluche Oracle immer öfter...

Donald
Kommentar