Benutzer mit den meisten Antworten
String addieren Operator, in Oracle || in MSSQL +, gibt es ein SQL Script für beides?

Frage
-
Hallo Forum,
folgendes SQL Statment funktioniert gegen MS SQL:
SELECT SPALTE1 + SPALTE2 AS LANGERTEXT FROM TABELL1
in Oracle musste ich das jetz anpassen:
SELECT SPALTE1 || SPALTE2 AS LANGERTEXT FROM TABELL1
Beide SQL Statements scheinen nur auf der jeweiligen Datenbank zu funktionieren.
Gibt es ein allgemeingültiges Script mit dem ich zwei Strings miteinander verketten kann?
Gruß und TIA
Michael
Antworten
-
Hallo Michael,
Nein, das weicht ab.
Und einer der (vielen) Gründe, warum ich hier schon eine Trennung empfohlen hatte:
2.) Sinnvoller wäre die Datenbanksysteme deutlicher zu trennen, so dass Du nicht genötigt bist,
den kleinsten gemeinsamen Nenner beim SQL zu finden.Gruß Elmar
P.S.: mit Denali gibt es dann Concat (kennt m. W. auch Oracle) - das hilft aber heute nicht.
- Als Antwort markiert Michael Brockhoff Mittwoch, 20. Juli 2011 12:41
Alle Antworten
-
Hallo Michael,
Nein, das weicht ab.
Und einer der (vielen) Gründe, warum ich hier schon eine Trennung empfohlen hatte:
2.) Sinnvoller wäre die Datenbanksysteme deutlicher zu trennen, so dass Du nicht genötigt bist,
den kleinsten gemeinsamen Nenner beim SQL zu finden.Gruß Elmar
P.S.: mit Denali gibt es dann Concat (kennt m. W. auch Oracle) - das hilft aber heute nicht.
- Als Antwort markiert Michael Brockhoff Mittwoch, 20. Juli 2011 12:41
-
Hallo Elmar,
danke für die Antwort,
ich möchte halt möglicht wenig Datenbank abhängige Ausführungspfade haben.
Aber hier muss ich wohl tatsächlich abfragen, welche Datenbank dahinter liegt,
und die unterschiedlichen Strings absetzen.
Seltsam das so etwas simples schon unterschiedlich in Oracle und SQL gehandhabt wird.
Gruß
Michael
-
Hallo Michael,
auch wenn es im ersten Moment paradox erscheinen mag:
"Möglichst wenig Datenbank abhängige Ausführungspfade" erhältst Du dann,
wenn Du die Datenbanken in eigene Datenklassen trennst.Mit etwas Vererbung kann man die Teile, die wirklich gleich sind, in eine Basisklasse packen.
Dazu schreibst Du ein Testmodul (aka Unit Test), der die erwartenden Ergebnisse
gegen die jeweiligen Provider prüft.Kommt eine Datenbank hinzu, schreibt man einen weiteren Provider ...
Alles andere führt über kurz oder lang zu einem Anwachsen der Komplexität (Ausführungspfade),
wenn da immer wieder steht if (Oracle) oder if ((SqlServer || Sybase) && !Oracle)Gruß Elmar
-
Hallo Michael,
wenn Du meinst, damit kämst Du davon ;-)
Da kann man die SQL Anweisungen in eine Xml- oder Textdatei verlagern,
lässt ggf. einen RegEx für Ersetzungen drüberlaufen,
splittet sie in WSF-Dateien damit man die Übersicht nicht verliert
...oder macht Nägel mit Köpfen und entwirft COM-Klassen mit .NET
(Wenn Du jetzt mit COBOL kommst, das hatte ich auch schon mal ;-)
Gruß Elmar
-
Hallo Elmar, ok du hast mich erwischt, ich bin ein fauler Hund und belass es dann beim Zweizeiler im vbscript ;)
if(constring = "Provider=MSDASQL.1;") then SQLString = "SELECT VORGANG + '|' + TYP + '|' + GRUND AS COMBO1 FROM DOK_TYPEN ORDER BY VORGANG,TYP,GRUND" else SQLString = "SELECT VORGANG || '|' || TYP || '|' || GRUND AS COMBO1 FROM DOK_TYPEN ORDER BY VORGANG,TYP,GRUND" end if
Der eigentliche Grund ist eh nur das ich bei mir lokal das in einer MSSQL Datenbank habe,
und beim Kunden ist es eine Oracel Datenbank. Die ich beide über einen identischen ODBC DSN anspreche
Gruß Michael
-
Hallo Michael,
In VBScript kann man auch Ersetzungen durchführen :)
Dim SqlString SqlString = "SELECT VORGANG {+} '|' {+} TYP {+} '|' {+} GRUND ..." SqlString = ReplaceSqlPlaceholder( SqlString, DbType.SqlServer ) Function ReplaceSqlPlaceholder( ByVal SqlCommand, ByVal DbType ) Dim Result Result = SqlCommand Select Case DbType Case SqlServer Result = Replace( Result, "{+}", "+" ) ... Case Oracle Result = Replace( Result, "{+}", "||" ) ... End Select ReplaceSqlPlaceholder = Result End Function
Soll in etwa heißen, die Sachen wie || vs. +, GETDATE(), ... werden einfach als Platzhalter geschrieben, {+}, {Date}, ... und dann über eine Funktion ersetzt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Michael,
das mit dem "faulen Hund" hatte ich nicht mal gedacht.
Und Abkürzungen gehen wir alle mal (oder glauben es zumindest).Wenn das Ganze mit steigendem Umfang später stressiger und nerviger wird,
so erinnern sich Deine kleinen grauen Zellen vielleicht an diese Aussagen
und werden dann kreativ ;-)Gruß Elmar
-
Hallo Elmar Hallo Stefan,
danke nochmal für die Hinweise,
da es nur eine einmalige Sache für einen Kunden ist, die ich
nicht irgendwo wiedeverwenden kann, belass ich es jetzt so.
Sollte sich herauskristallisieren das ich es nocheinmal brauche,
werde ich mich an deine Worte erinnern ;)
Gruß
Michael