ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
793
793
EMPFEHLEN
-
04.11.11 10:53 #1
Hall zusammen,
bei unserer Webanwendung wurde eine Oracle-Datenbank durch eine IBM DB2 ersetzt.
Nun hab ich ein PHP-Skript (nicht von mir) in dem folgender SQL-Befehl auf die DB2 angepasst werden muss. Ich weiss leider nicht wo und wie hier was geändert werden müsste. Hoffe es kann mir jemand weiterhelfen. Eine Fehlermeldung gibt es nicht, da diese abgefangen wird und eine Standard-Fehler-Nachricht ausgegeben wird ("Bitte wählen Sie....bla bla"). Es ist also keine Fehlernachricht vom PHP-Interpreter
Hier der Code wo vermutlich der Fehler liegt:
Hoffe, mir kann jemand weiterhelfen. Steh total auf dem Schlauch.PHP-Code:for ($q=1; $q<=$this->ospAmount; $q++) {
$sql_spr = "SELECT PRIUPR,PRITOP FROM AML_IOP a,COM_PRI b
WHERE a.IOPREFINTKEY = ".$this->ospObject[$this->opoAmount][$q]['OSPINTKEY']."
AND IOPREVACT = 999999999 AND PRIINTPIK = a.IOP_RF_PRIINTPIK AND PRIREVACT = 999999999";
$result_spr = $this->db->query($sql_spr);
if (!DB::isError($result_spr)) {
$this->sprObject[$this->opoAmount][$q] = $result_spr->fetchRow();
} else {
$errorText[] = amoss_text_10014.'<br>';
}
$this->ospObject[$this->opoAmount][$q]['UPR'] = $this->sprObject[$this->opoAmount][$q]['PRIUPR'];
$this->ospObject[$this->opoAmount][$q]['TOP'] = $this->sprObject[$this->opoAmount][$q]['PRITOP'];
}
Wenn euch mein Beitrag weiterhilft, bitte bewerten
-
04.11.11 11:01 #2
Lass dir doch den SQL-Query mal ausgeben und gib ihn direkt in der Datenbank ein, dann sollte doch ein entsprechnder Fehler kommen.
Die Schweine von heute sind unsere Schnitzel von morgen!
-
04.11.11 13:06 #3
Hallo,
kannst du mir sagen wie ich mir den SQL Query ausgeben lassen kann?Wenn euch mein Beitrag weiterhilft, bitte bewerten
-
04.11.11 13:17 #4
Da ich die Datenbank-Klasse nicht kenne mit der gearbeitet wird, einfach ein "echo" mit dem Query einfügen:
PHP-Code:for ($q=1; $q<=$this->ospAmount; $q++) {
$sql_spr = "SELECT PRIUPR,PRITOP FROM AML_IOP a,COM_PRI b
WHERE a.IOPREFINTKEY = ".$this->ospObject[$this->opoAmount][$q]['OSPINTKEY']."
AND IOPREVACT = 999999999 AND PRIINTPIK = a.IOP_RF_PRIINTPIK AND PRIREVACT = 999999999";
// Ausgabe der Querys da in der Schleife
echo $sql_spr . '<br />';
$result_spr = $this->db->query($sql_spr);
if (!DB::isError($result_spr)) {
$this->sprObject[$this->opoAmount][$q] = $result_spr->fetchRow();
} else {
$errorText[] = amoss_text_10014.'<br>';
}
$this->ospObject[$this->opoAmount][$q]['UPR'] = $this->sprObject[$this->opoAmount][$q]['PRIUPR'];
$this->ospObject[$this->opoAmount][$q]['TOP'] = $this->sprObject[$this->opoAmount][$q]['PRITOP'];
}
Die Schweine von heute sind unsere Schnitzel von morgen!
-
04.11.11 20:12 #5
Hallo,
so ich hab mir den SQL-String ausgeben lassen und direkt auf die Datenbank angewendet. Und prompt erscheint der Fehler:
Auf "(+" folgt ein unerwartetes Token ")".
Der String ist:
Code sql:1
SELECT a.ORDINTKEY,a.ORDREVACT,a.ORDREVFIR,a.ORDREVTYP,a.ORDCCI, a.ORDIPO,a.ORD_RF_MFRCON,a.ORD_RF_MFRCUS,a.ORDPCY,a.ORDYORD,a.ORDYASC, a.ORDUNC,a.ORDSYS,a.ORD_RF_SUPSUS,a.ORDYSUSREC,a.ORDAMN,a.ORDMOI,a.ORDICR, a.ORDBNO,a.ORDQTL,a.ORDEVT,a.ORDTRU,a.ORDTRU_UNC,a.ORD_RF_ORDINTKEY,a.ORD_RF_ORDIPO, a.ORD_RF_CCOINTKEY,a.ORD_RF_CBUINTKEY,a.ORD_RF_SUPSUS_AGE,a.ORDYIPP,a.ORD_RF_QUOINTKEY, a.ORD_RF_MFRSTO,a.ORD_RF_MFRITO,a.ORDACK,a.ORDPCD,a.ORDYDGC,a.ORDR3KEYNO,a.ORDLASTAMN, a.ORDLOCKED,a.ORD_RF_UDCUDC,a.ORDRDD,a.ORDCDD,a.ORDFDD,a.ORDORIG,a.ORD_UC,a.ORD_LUPDATE, a.ORD_LUPTIME,a.ORD_LUPUSR,b.ORUORN FROM AMA_ORD a,AML_ORU b WHERE a.ORDREVACT = 999999999 AND a.ORDR3KEYNO IS NOT NULL AND b.ORUREVACT = 999999999 AND a.ORDINTKEY[B] (+) = [/B]b.ORUREFINTKEY AND UPPER(a.ORDR3KEYNO) LIKE UPPER('%4500057973%')
Ich denke mal, dass er mit dem (+) nicht klar kommt. Aber da ich mich mit DB2 nicht auskenne, weiß ich nicht wodurch ich das ersetzen könnte? Weiss das jemand?Wenn euch mein Beitrag weiterhilft, bitte bewerten
-
17.11.11 12:02 #6
Hat keiner eine Idee was ich daran anpassen muss? Brauche unbedingt Hilfe
Wenn euch mein Beitrag weiterhilft, bitte bewerten
-
Moin disaster,
DB2 kennt die (+)-Join-Syntaxvariante nicht.
Die musst du in ein explizites LEFT JOIN/OUTER JOIN umwandeln ODER aber das angesprochene Feld in der WHERE-Clause auf "ist NULL oder gleich dem Feld in der anderen Tabelle" prüfen.
In deinem Beispiel:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
SELECT a.ORDINTKEY , a.ORDREVACT , a.ORDREVFIR , a.ORDREVTYP , a.ORDCCI , a.ORDIPO , a.ORD_RF_MFRCON , a.ORD_RF_MFRCUS , a.ORDPCY , a.ORDYORD , a.ORDYASC , a.ORDUNC , a.ORDSYS , a.ORD_RF_SUPSUS , a.ORDYSUSREC , a.ORDAMN , a.ORDMOI , a.ORDICR ... , b.ORUORN FROM AMA_ORD a , AML_ORU b WHERE a.ORDREVACT = 999999999 AND a.ORDR3KEYNO IS NOT NULL AND b.ORUREVACT = 999999999 AND a.ORDINTKEY (+) = b.ORUREFINTKEY AND UPPER(a.ORDR3KEYNO) LIKE UPPER('%4500057973%');
...ist ja vermutlich gemeint, dass die beiden Tabellen a und b über "ORDREVACT=9999999999"eingeschränkt sind,
in Tabelle a der ORDINTKEY gleich NULL oder aber gleich dem b.ORUREFINTKEY sein muss.
Also eigentlich ein "RIGHT OUTER JOIN" von a auf b (alle Sätze aus b, wenn über b.ORUREFINTKEY und a.ORDINTKEY verknüpft wird.
Muss eine grottige Performance bzw. eine bemerkenswerte Lasterzeugung bewirken
P.S. Wer hat sich bei euch die Tabellenfeldnamen ausgedacht?
Bis vorhin dachte ich, ich würde schon alle Abgründe der Datenmodellierung kennen...
Grüße
BiberGeändert von Biber3 (17.11.11 um 17:35 Uhr)
-
18.11.11 20:00 #8
Hi Biber,
viel Dank fürs erste für deine Antwort. Das Problem ist, dass ich mich mit DB2 nicht auskenne und bei SQLs mit Joins bisher wenig gemacht habe
. Kannst du mir sagen, wie ich das (+) konkret ersetzen muss bzw. wie der SQL String dann aussehen muss? Sonst muss ich jetzt noch hingehen und schauen wie ich ein LEFT/RIGHT JOIN für eine DB2 bastele.
Würdest mir damit sehr helfen.Wenn euch mein Beitrag weiterhilft, bitte bewerten
-
Moin desaster0505,
da willst jetzt bestimmt nicht wirklich von mir hören, ich wäre ein klitzekleines bisschen skeptisch, ob du als Bei-JOINS-rechts-nicht-von-links-unterscheiden-Könner nun unbedingt die SQL-Statements von Oracle nach DB2 portieren solltest?
Hab ich mir gedacht - von daher sprech ich das Thema lieber nicht an.
Aber BTW - meine Töchter sind eigentlich immer interessiert an Nebenjobs nach der Schule - Kontakt könnte ich vermitteln.
Wie im Vorkommentar geschrieben lese ich aus dem Statement einen RIGHT JOIN von Tabelle a auf b.
--> das sieht allerdings insgesamt so dubios aus, dass ich es UNBEDINGT fachlich verifizieren würde
Falls erstmal zur Pflichterfüllung eine "wortwörtliche Übersetzung" ausreicht, dann in etwa:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
SELECT a.ORDINTKEY , a.ORDREVACT , a.ORDREVFIR , a.ORDREVTYP , a.ORDCCI , a.ORDIPO , a.ORD_RF_MFRCON , a.ORD_RF_MFRCUS , a.ORDPCY , a.ORDYORD , a.ORDYASC ... , b.ORUORN FROM AMA_ORD a RIGHT OUTER JOIN AML_ORU b ON a.ORDINTKEY = b.ORUREFINTKEY WHERE a.ORDREVACT = 999999999 AND a.ORDR3KEYNO IS NOT NULL AND b.ORUREVACT = 999999999 -- über OUTER JOIN abgefackelt --AND a.ORDINTKEY (+) = b.ORUREFINTKEY AND UPPER(a.ORDR3KEYNO) LIKE UPPER('%4500057973%');
Anmerkung:
Gegen die "wortwörtliche Übersetzung" sprechen aus meiner Sicht auch die abstrusen WHERE-Bedingungen " AND a.ORDR3KEYNO IS NOT NULL ... AND UPPER(a.ORDR3KEYNO) LIKE UPPER('%4500057973%')"
-- > so ein Gestrunkele ohne fachliche Begründung würde ich eher NICHT produktiv setzen.
Gibt es denn keinerlei Doku für diese usecases?
Grüße
Biber
Ähnliche Themen
-
Update-Befehl auf Oracle-Datenbank
Von kallkar im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 15.01.11, 14:40 -
ORACLE SQL Befehl Probleme mit GROUP BY
Von mafin im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 02.02.09, 14:51 -
Oracle PL/SQL Daten von Insert Befehl kriegen?
Von Finalplayer_Ryu im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 30.09.08, 20:01 -
[ORACLE] MySQL-Script für ORACLE anpassen
Von Sirakov im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 02.04.07, 09:38 -
Oracle Datenbank
Von riddler2kone im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 06.03.02, 09:54





Zitieren
Login





