z.t.i
-
Gesamte Inhalte
25 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von z.t.i
-
-
Hi _n4p_,
und wie köönte man dann vorgehen??? Du meinst nvl wäre nicht gerade hilfreich, aber ich komme ja gar nicht dazu einen Update zu starten, weil ich ständig diese Fehlermeldung habe.
Ich habe auch schon folgendes versucht: Das habe ich im Inet gefunden. Soll für das gleiche Problem weitergeholfen haben. Aber bei mir geht das auch nicht. Ich kann das zwar ausführen, aber irgendwie landet das ins echo oder so, weil der Compiler nach ca 9 sec durch ist, und nichts tut.
update Prod.Rechnungen Produktion
set Produktion.rechnung_summe=(
select Migration.rechnung_summe
from Mig.Rechnungen Migration, Prod.Rechnungen@Prod Produktion
where Migration.rechnung_art='Einzug'
and Migration.kunde_nr=Produktion.kunde_nr
and Migration.rechnung_nr=Produktion.rechnung_nr
and Migration.auftrag_nr=Produktion.auftrag_nr
and Migration.objekt_nr=Produktion.objekt_nr
and Migration.vertrag_nr=1
and Migration.rechnung_gueltig_ab=Produktion.rechnung_ gueltig_ab
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_hhistorie='Aktuell'
and Migration.rechnung_summe!=Produktion.rechnung_summe)
where vertrag_nr=(Select vertrag_nr
from mig.Rechnungen Migre
where Produktion.vertrag_nr=Migre.vertrag_nr)
-
Hi,
hat leider nicht funktioniert.
Ich habe die gleiche Fehlermeldung wie eben: "ORA-01427: Unterabfrage fur eine Zeile liefert mehr als eine Zeile".
Gruß
-
Hey grueni,
danke das du mir antwortest. Im Moment fäält mir auch nichts mehr ein ich werde das mal versuchen.
Es ist zwar nicht die beste Lösung aber naja. Hauptsache ich verliere dadurch keine Daten.
-
Guten Morgen grueni,
auf ein Neues.
Ich habe genau das Problem, was du mir gestern zugeschrieben hast. Mit distinct wird das nicht lösbar sein. Ich habe noch etwas nachgebohrt und habe folgendes erarbeitet.
Meine Abfrage:
update Prod.Rechnungen Produktion
set Produktion.rechnung_summe=nvl((
select Migration.rechnung_summe
from Mig.Rechnungen Migration, Prod.Rechnungen@Prod Produktion
where Migration.rechnung_art='Einzug'
and Migration.kunde_nr=Produktion.kunde_nr
and Migration.rechnung_nr=Produktion.rechnung_nr
and Migration.auftrag_nr=Produktion.auftrag_nr
and Migration.objekt_nr=Produktion.objekt_nr
and Migration.vertrag_nr=1
and Migration.rechnung_gueltig_ab=Produktion.rechnung_ gueltig_ab
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_hhistorie='Aktuell'
and Migration.rechnung_summe!=Produktion.rechnung_summ e),0)
Und zwarhabe ich folgenden Fall. Ich habe einen Kunden mit der kunde_nr=1 der 2 Verträge hat. Kunde_nr=1 mit Vertrag_nr=1 hat rechnungssumme=12000 und ebenfalls hat der Kunde_nr=1 mit Vertrag_nr=2 die rechnungssumme=8500.
Daher habe ich folgende Änderung in die Abfrage eingabaut: and Migration.vertrag_nr=1. s. o.
Wäre meine hier dargestellte Abfrage so korrekt???
-
Hi grueni,
danke für deine Mühe. Ich habe durch having count klausel heruafinden können, dass ich tatsächlich Daten habe die doppelt vorkommen. Bspw. kunde_nr 1 mit der rechnung_nr 1 hat die rechnungssumme 10020 und kunde_nr 1 mit der rechnung_nr 2 hat ebenfalls die rechnungssumme 10020.
Irgendwie muss ich dieses Problem lösen. Daher habe ich überlegt den distinct anzuwenden. Dann habe ich eines von beiden schon upgedatet. Danach dürfte (nach dem Update) dieses Problem für doppelte Einträge nicht mehr vorkommen, da der eine ja nicht mehr dem Kriterium "Migration.rechnungssumme!=Produktion.rechnungssumme" entspricht. Dieses Vorgehen wiederhole ich dann solange bis alles upgedatet ist.
Müsste doch so gehen oder grueni??? Weil die ermitteleten Werte sind schon richtig.
Gruß
-
Hi,
Ich glaube du hast nicht verstanden, was ich (und in deinem letzten Thread dbwizard) dir sagen wollte. Also nochmal:Was soll passieren, wenn zu einer Rechnung in der Produktionsdatenbank nach deinen Einschränkungskriterien zwei Rechnungen aus der Migrationsdatenbank passen?
Ich kenn deine konkreten Daten nicht, aber es sieht so aus als würdest du entweder nicht stark genug einschränken oder die Daten aus der Migrationsdatenbank sind nicht "sauber".
Also die passenden rechnungssummen sollen ignoriert werden. Nur die nicht passenden rechnungen müssen aus der Migration in die Produktion herbeigeführt werden. Ob die Migrationsdatenbank sauber ist kann ich nicht beurteilen. Ich weiß nur dass man da ordentlich Sch...ße gebaut wurde.
(Sorry wegen dem Ausdruck)
Bspw. Migration Kunde_nr 1 hat die rechnungssumme 1000 , in der Produktion steht ab bei der Kunde_nr 1 die rechnungssumme 1023 was eben falsch ist.
Ich meine, dass ich die Einschränkungen eigentlich ordentlich durchgenommen habe. " migration.rechnungssume!= produktion.rechnungssumme "
Bitte helft mir ich komme da echt nicht mehr weiter....:( Ich weiß dass ihr keinen Überblick auf meine Daten habt, aber eigentlich müsste mein Statement doch funktionieren.
-
Hi,
Wenn dir Oracle nur die Möglichkeit über Subqueries liefert, wirst du keine andere Wahl haben. Ich hab grad nicht die Zeit das nachzulesen.Ist es von der fachlichen Logik her überhaupt zulässig, daß man mehrere Datensätze erhält? Wenn ja, welche Rechnungssumme soll dann in die Produktivdatenbank geschrieben werden?
ja aus der Logik denke ich schon. Weil der ja in der Subquery, die Abfrage mit der Unterabfrage vergleicht und versucht diese zu ersetzen.
Aus der Migration sollen alle korrekten Rechnungssummen selektiert und diese dann mit der falschen rechnungssummen in der Produktion ersetzt werden.
Hast du schon versucht die Daten nur zu selektieren, also nur ein SELECT?Ja ich habe schon die Daten selektiert, welche die korrekten Werte enthalten.
-
Hi grueni,
über Subqueries habe ich das auch schon versucht aber nada....
Da bekam ich als Fehler, dass die Unterabfrage mehrere Zeilen enthält.
Also ich verzweifle echt gerade... Und komme Leider gar nicht weiter...
Im Moment scheint es so drehe ich mich echt im Kreis.
-
Hi grueni,
das stimmt. Das Problem hatte ich schon hier angesprochen. Aber da cihdachte dass es so lange her ist habe ich einen neuen Thread eröffnet.
Sorry dass ich nicht erwähnt habe, dass ich mit Oracle 10 arbeite.
Die Fehlermeldung lautet : ORA-00933: SQL-Befehl wurde nicht korrekt beendet
Die Fehlermeldung taucht im from Klausel auf.
Da ich nicht weiter komme lautet die Frage daher ob sie Syntax falsch ist???
-
Hi,
nein gewollt ist das nicht ist ein Fehler von mir.
Hab das wohl falsch herauskopiert. Muss "and Produktion.rechnung_historie='Aktuell' " heißen.
Aber an dem Fehler liegt es nicht.
-
Hallo,
ich habe folgendes Problem: Ich habe zwei Tabellen rechnungen. Die eine ist aus der Migration und die andere aus der Produktion.
Da die Rechnungssummen (ca. 900 Werte) der Tabelle Rechnungen im Produktion fehlerhaft sind, müssen die richtigen Werte aus der Migration ermittelt und diese in die Produktion eingepflegt werden.
Dazu habe ich folgenden Statement aufgebaut:
update Prod.rechnungen Produktion
set Produktion.rechnungssumme=Migration.rechnungssumme
from Prod.rechnungen Produktion inner join mig.rechnungen@mig Migration
on (Migration.kunde_nr=Produktion.kunde_nr and Migration.rechnung_nr=Produktion.rechnung_nr
and Migration.auftrag_nr=Produktion.auftrag_nr and Migration.objekt_nr=Produktion.objekt_nr
and Migration.rechnung_gueltig_ab=Produktion.rechnung_ gueltig_ab)
where Migration.rechnung_art='Einzug'
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_hhistorie='Aktuell'
and Migration.rechnungssumme!=Produktion.rechnungssumme
Leider komme ich mit diesem Befehl nicht weiter, weil ich ein Syntaxfehler bzw. Gedankenfehler habe und dieser nicht ausführbar ist.
Nun lautet meine Frage wie ich das am besten gelöst bekomme???
Bitte wirft ein Auge darauf. Ich versuche seit Tagen dieses Problem zu lösen, habs leider nicht geschafft!!
Gruß
-
Hi,
Hehe Ne noch nicht aber ich habe wenigstens einen Ansatz von dir.
Zur Vollständigkeits halber:
update Prod.Rechnungen Produktion
set Produktion.rechnung_summe=Migration.rechnung_summe
from Prod.Rechnungen@Prod Produktion inner join Mig.Rechnungen Migration
on (Migration.kunde_nr = Produktion.kunde_nr and Migration.rechnung_nr=Produktion.rechnung_nr and Migration.auftrag_nr=Produktion.auftrag_nr and
Migration.objekt_nr=Produktion.objekt_nr and Migration.rechnung_gueltig_ab=Produktion.rechnung_gueltig_ab)
where Migration.rechnung_art='Einzug'
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_historie='Aktuell'
and Migration.rechnung_summe!=Produktion.rechnung_summe),0)
Leider funktioniert dies auch nicht ganz einwandfrei... Der gibt mir Fehler bei der From Klausel.... ORA-00900: Ungultige SQL-Anweisung
Danke der Nachfrage. Ich denke dass der Syntax nicht stimmt..
-
1000000000000 x Dank für deine Unterstützung dbwizard.
-
Hmm da ich leider auch vergebens im inet über meine Problematik gegoogelt habe möchte ich noch eine Fragan den Usern der Fachinformatiker Forum fragen.
Wie kann ich das oben stehende Statement so umändern, sodass ich meine ca 800 rechnungssummen gleichzeitig updaten kann???
Vielleicht gibt es da eine/n oder andere/n der genau diese Problem hatte bzw. kennt..... und mir da etwas weiterhelfen kann????:(
-
danke nochmals dbwizard,
das stimmt du kennst die Daten nicht, aber einschränken kann ich nicht, da es sich um eine kompakte Angelegenheit handelt.
Ich musss ca.800 rechnungssummen ändern. Einzeln wird das wohl nicht passen.
Gruss
-
Hi,
Die Fehlermeldung ist ja eigentlich klar ? Dein Select liefert dir mehr als eine "Summe" zurück (Also mehr als eine Zeile). ORACLE kann ja nun nicht EINE Zeile bei deinem Update gleichzeitig mit MEHREREN Daten befüllen.
-Schau dir die Einschränkungen in im WHERE - Teil, evtl musst du dort stärker einschränken
- ...oder du hast "unsaubere" Daten, also Doppelte Einträge oder was auch immer
Gruss
Hi , ja das stimmt ich erhalte durch den select mehrere rechnungssummen.
Die Where Klausel brauche ich, damit das alles eindeutig bleibt und ich auch die richtigen werte aktualsiere.
Wie kann ich noch vorgehen
Ich wäre über jeden Tipp dankbar!
-
Mist ich habe diesen doofen Fehler
ORA-01427: Unterabfrage fur eine Zeile liefert mehr als eine Zeile
update Prod.Rechnungen Produktion
set Produktion.rechnung_summe=nvl((
select Migration.rechnung_summe und zwar genau hier
from Mig.Rechnungen Migration, Prod.Rechnungen@Prod Produktion
where Migration.rechnung_art='Einzug'
and Migration.kunde_nr=Produktion.kunde_nr
and Migration.rechnung_nr=Produktion.rechnung_nr
and Migration.auftrag_nr=Produktion.auftrag_nr
and Migration.objekt_nr=Produktion.objekt_nr
and Migration.rechnung_gueltig_ab=Produktion.rechnung_ gueltig_ab
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_hhistorie='Aktuell'
and Migration.rechnung_summe!=Produktion.rechnung_summ e),0)
ich weiß gar nicht warum ich diese Fehlermeldung hier erhalte. Das ist ja echt zu Haare zerreisen.
-
Hi dbwizard,
danke für den Tipp. Ich werde gleich damit anfangen..
-
Wenn Dein Statement syntaktisch korrekt ist, kannst Du Dir Deine Daten zerstören. Einmal wenn das Statement nicht das tut, was es tun soll bzw wenn eben bei dem Lauf ein Fehler auftritt, bzw während des Laufes Daten geändert werden und das Statement dadurch eben anders die Daten manipuliert.
Deshalb gibt es Transaktionssicherungen und das "Commit" ist sicherlich nicht gleich zusetzen mit Transaktion. Aber ich bekomme graue Haare, wenn ich Deine Frage lesen, denn wenn Du nicht weißt wie Du das Problem richtig und sinnvoll angehst, dann rate ich Dir, lass Deine Finger vom Produktivsystem. Der Schaden der entstehen könnte ist recht groß, wenn Du weder Backup noch sonst irgendetwas hast
Danke für den Tipp. ABer du brauchst keine grauen Haare zu bekommen. Ich versuche hier alleine mein Ding durchzu ziehen. Ich bin auch alleine bi hierhin gekommen, so dass ich geanu weiss was ich haben möchte.
Ich wollte nur fachlichen rat von euch haben, inwiefern mein Statement korrekt bzw nicht korrekt ist.
Da ich das erst testen werde, beziehe ich in diesem Fall den commit nicht mit ein...
-
Ich würde Dir auch dazu raten, das ganze als Transaktion durch zu führen, wenn Du es später im Produktionssystem durchführst
Hmm ja stimmt, dann halt mit commit; am Ende damit die Aktualisierung auch festgeschrieben ist.
Aber trotzdem beantwortet was meint Ihr dazu...
Würde ich hiermit meine Daten zerstören??? Bzw. wenn ich es austeste gibt es eine Möglichkeit die Daten wieder zurück zu bekommen. Natürlich wenn ich die Transaktion weglasse???
-
Hallo dbwizard,
- Was heisst fehlgeschlagen ? gab's eine Fehlermeldung ?
-
Hallo Leute,
ich habe einen SQL-Statement geschrieben die Leider fehlgeschlagen ist. Die Aktion wurde nicht mal durchgeführt. Daher habe ich mich jetzt entschlossen kurzerhand einenen neuen SQl Statement aufzubauen.
Da ich nicht so erfahren darin bin, möchte ich bei den Usern der Fachinformatiker/in gerne wissen ob ich mit der untenen stehende Statement meine Daten aktualisisern kann ohn die Daten zu zerstören.
Ich weiß es heißt Learning by Doing aber ich mache das für die Arbeit.
Ich wäre daher sehr dankbar wenn Ihr ggf. eure Anmerkung bzw. Verbesserungsvorschläge zu dem Statement geben könntet.
update Prod.Rechnungen Produktion
set Produktion.rechnung_summe=nvl((
Select Migration.rechnung_summe
from Mig.Rechnungen Migration, Prod.Rechnungen@Prod Produktion
where Migration.rechnung_art='Einzug'
and Migration.kunde_nr=Produktion.kunde_nr
and Migration.rechnung_nr=Produktion.rechnung_nr
and Migration.auftrag_nr=Produktion.auftrag_nr
and Migration.objekt_nr=Produktion.objekt_nr
and Migration.rechnung_gueltig_ab=Produktion.rechnung_ gueltig_ab
and Migration.rechnung_historie='Aktuell'
and Produktion.rechnung_historie='Aktuell'
and Migration.rechnung_summe!=Produktion.rechnung_summe),0)
commit;
-
Hallo robotto7831a,
danke für deinen Tipp.
Dann müsste es bei mir so ausschauen???
Kannst du evtl. nur ein Blick drauf werfen ob das so mit der syntax funktionieren könnte???
create table tblmigkorrektur as
Select migration.rechnung_summe NEU,migration.kunden_nr,prod.rechnung_summe ALT
from migr.migration_rechnung migr, seb.rechnungen@recprod prod
where migr.rechnung_art='Einzug'
and migr.kunde_nr(+) = prod.kunde_nr
AND migr.rechnung_nr(+) = prod.rechnung_nr
AND migr.rechnung_betrag(+) = prod.rechnung_betrag
AND migr.objekt_nr(+) = prod.objekt_nr
and migr.rechnung_offen='ja'
and migr.rechnung_historie='Aktuell'
and migr.rechnung_summe!=prod.rechnung_summe
and prod.rechnung_offen='ja'
and prod.rechnung_historie='Aktuell'
UPDATE seb.rechnungen@recprod prod SET prod.rechnung_summe
=(select korr.rechnung_summe from tblmigkorrektur korr
where korr.kunde_nr=prod.kunde_nr)
where gor.kunde_nr in(select kunde_nr from tblmigkorrektur);
commit;
-
Hallo Leute,
ich habe folgendes Problem. Ich muss aus der Tabelle Rechnung die Rechnungssumme in dem Schema mig (migration) mit der Tabelle Rechnung aus dem Schema prod in der produktivdatenbank auf falsch migrierte Rechnungssummen in der Produktivdatenbank prüfen.
Dieses habe ich auch gemacht siehe Code:
select migration.rechnung_summe NEU,migration.kunden_nr,prod.rechnung_summe ALT
from migr.migration_rechnung migr, seb.rechnungen@recprod prod
where migr.rechnung_art='Einzug'
and migr.kunde_nr(+) = prod.kunde_nr
AND migr.rechnung_nr(+) = prod.rechnung_nr
AND migr.rechnung_betrag(+) = prod.rechnung_betrag
AND migr.objekt_nr(+) = prod.objekt_nr
AND migr._gueltig_ab(+) = gor.pol_gueltig_ab
and migr.rechnung_offen='ja'
and migr.rechnung_historie='Aktuell'
and migr.rechnung_summe!=prod.rechnung_summe
and prod.rechnung_offen='ja'
and prod.rechnung_historie='Aktuell'
order by migr.kunde_nr asc
Als nächstes muss ich mit der richtigen (migration.rechnung_summe NEU) rechnungssumme die falsch migrierten rechnungssumme in der Produktivdatenbank ersetzen.
Wie kann ich das machen?? Ich wäre für jeden Tipp dankbar!!
Und würde mich sehr freuen, wenn Ihr mir weiterhelfen könnt.
Es wurde mir bereits empfohlen eine Tabelle zu erzeugen.. s.u.
1. create table tblmigkorrektur as select ...
und diese dann mit einem Update Befehl zu aktualisieren... s.u.
2. UPDATE ziel SET rechnung_summe
=(select korr.rechnung_summe_neu from tblmigkorrektur korr
where korr.kundenner=ziel.kundennr)
where kundennur in(select kundennr from tblmigkorrektur);
commit;
Da ich zu 1 nicht recht viel weiß würde ich mich sehr freuen wie ich das damit lösen könnte. Kennt jemand den Standard Syntax zu 1???
Wie könnte ich dass den lössen. Einfache meine Abfrage dahinein bauen??:hells::(
Hilfe bei Update Befehl ????
in Datenbanken
Geschrieben · Bearbeitet von z.t.i
Hi ,
Danke für den Tipp. Ich kenne mich Leider mit Cursor nicht aus. Muss mir das mal im inet anschauen. Danek nochmals.
Gruß