julianb
Goto Top

Konvertierung SQL-Script von MSSQL auf SQLPLUS (Oracle)

Ich habe ein SQL-Script welches problemlos auf einem MSSQL 2008er Server läuft, dieses Skript muss ich nun auf einer Oracle-DB mit SQLPLUS zum laufen bekommen, nur weiß ich leider nicht wie!

Hallo Zusammen,

ich habe ein Skript welches unter einem MSSQL 2008 Server wunderbar läuft. Das Skript ist selbstgeschrieben, die Funktion zu erläutern würde wirklich sehr lange dauern und den Rahmen sprengen. Naja, aber wie gesagt es funktioniert ja.
Nun mein Problem, ich muss dieses Skript nun unter Oracle via SQLPLUS zum laufen bekommen, das gestaltet sich als recht schwierig. Ich bin ein absoluter Neuling was SQL angeht und bin eigentlich froh wenn ein Skript mal funktioniert.
Nun meine Frage: Könnt ihr mir bitte helfen und erklären wie ich das u.s. Skript unter SQLPLUS zum laufen bekomme und wo meine Fehler sind bzw. warum, was falsch ist? Schließlich will ich ja auch lernen face-smile

Erstmal hier mein SQL-Skript weitestgehend an SQLPLUS angepasst:
SELECT		TO_CHAR(DATE,'YYYY-MM-DD') AS Datum,  
		TO_CHAR(RUN,'HH24:MI:SS ') AS Lauf,  
		NAME AS Läufer, 
		DESCRIPTION AS Beschreibung
FROM		INFO  RIGHT OUTER JOIN
		H_PRO  RIGHT OUTER JOIN
		T_PRO  RIGHT OUTER JOIN
		SCHEDULE  RIGHT OUTER JOIN
		OBJECT ON T_PRO.UID = OBJECT.UID ON 
		SCHEDULE.KEY = T_PRO.KEY ON H_PRO.KEY = SCHEDULE.KEY 
AND		H_PRO.DATE = SCHEDULE.DATE 
AND		H_PRO.S_KEY = T_PRO.S_KEY ON INFO.JEY = H_PRO.JEY
WHERE		TO_CHAR(DATE,'MM')='11'   
AND		TO_CHAR(DATE,'YYYY')='2009'   
AND		OBJECT.UID IN (SELECT UID FROM OBJECT_LIST WHERE TYPE = 'USER')   
ORDER BY	INFO.DATE;

Im SQLPLUS bekomme ich jetzt folgende Meldung:
OBJECT ON T_PRO.UID = OBJECT.UID ON
                        *

FEHLER in Zeile 10:
ORA-00904: "T_PRO"."UID": ungültiger Bezeichner   
Ich weiß wirklich nicht weiter,...

Wäre super wenn ihr mit beim "Übersetzen" helfen könntet!

Liebe Grüße,
Julian

Content-Key: 130032

Url: https://administrator.de/contentid/130032

Printed on: April 25, 2024 at 04:04 o'clock

Mitglied: 32067
32067 Nov 23, 2009 at 15:31:08 (UTC)
Goto Top
Hallo,

ich würde den Teil mit den ganzen INNER JOINS entweder mit Klammern versehen (t1 INNER JOIN (t2 INNER JOIN on ...) on ...) oder umbauen auf t1 INNER JOIN t2 on ... INNER JOIN t3 on ... , so sieht mir das irgendwie "seltsam" aus, was aber nicht ausschließen soll, daß es doch auch so richtig ist face-wink
Member: JulianB
JulianB Nov 23, 2009 at 15:43:31 (UTC)
Goto Top
Du meinst RIGHT OUTER JOIN, aber ich versuch das mal. Mein Problem an der Sache ist, der Teil mit den Joins ist halt noch die SQL von MSSQL genau dieser Part ist es den ich in Oraclegängiges SQL umgesetzt haben muss.
Member: Biber
Biber Nov 23, 2009 at 16:09:57 (UTC)
Goto Top
Moin JulianB,

ich würde zumindest zwei Umformulierungen vornehmen.
1) insbesondere das Feld DATE kommt in mehreren Tabellen (INFO, SCHEDULE und H_PRO) vor, aber auch die anderen Felder, die in der SELECT-Feldliste und im WHERE angesprochen werden, sollten eindeutig mit Präfix angesprochen werden.

2) wenn du doch ohnehin ausschließlich INNER JOINs verwendest, dann schreibe es doch auch lesbar

SELECT		TO_CHAR(??.DATE,'YYYY-MM-DD') AS Datum,  
		TO_CHAR(??.RUN,'HH24:MI:SS ') AS Lauf,  
		??.NAME AS Läufer, 
		??. DESCRIPTION AS Beschreibung
FROM		INFO i, H_PRO h, T_PRO t, SCHEDULE s, OBJECT o 
WHERE           t.UID = o.UID
AND		s.KEY = t.KEY 
AND             h.KEY = s.KEY AND h.DATE = s.DATE 
AND		h.S_KEY = t.S_KEY 
AND              i.JEY = h.JEY
AND		TO_CHAR(??.DATE,'MM')='11'   
AND		TO_CHAR(??.DATE,'YYYY')='2009'   
AND		o.UID IN (SELECT UID FROM OBJECT_LIST WHERE TYPE = 'USER')   
ORDER BY	i.DATE;

Bei allem,. wo jetzt ein ?? als Präfix steht, sinnvollerweise den richtigen Buchstaben einsetzen.

Grüße
Biber