Zum Inhalt springen

Hilfe wie aktualisiere ich eine Tabelle einwandfrei???


z.t.i

Empfohlene Beiträge

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;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Leute,

ich habe einen SQL-Statement geschrieben die Leider fehlgeschlagen ist.

Hallo,

- Was heisst fehlgeschlagen ? gab's eine Fehlermeldung ?

- Ist das Oracle ? Sieht jedenfalls so aus..

- Versuche mal den reinen Select Teil auszuführen, dann weisst du ja schon immerhin, ob dieser funktioniert und welches Resultat du erhälst

- Vor einem Update in einem Produktivsystem sollten solche Sachen immer auf eine Testsystem getestet werden, idealerweise mit Produktiven oder zumindest "ähnlichen" Daten

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

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???

Link zu diesem Kommentar
Auf anderen Seiten teilen

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???

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

- Ohne Commit kannst du mittels Rollback jederzeit die Transaktion zurücksetzten, beachte aber, dass es etliche Tools gibt, welche ein "Autocommit" absetzten, das führt öfters zu Überraschungen...

- Vieleicht ist es sinnvoll (Da du offensichtlich kein eigenes Testsystem zum Testen hast), zumindest die Tabelle, auf die der Update läuft, zu sichern :

- entweder mittels exp resp. datapump

- oder auch einfach mit einem CREATE Table save_prod as select * from Prod.Rechnungen

...so hast du zumindest den Originalzustand vorliegen, wenn was schiefgeht

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mist ich habe diesen doofen Fehler

ORA-01427: Unterabfrage fur eine Zeile liefert mehr als eine Zeile

ich weiß gar nicht warum ich diese Fehlermeldung hier erhalte. Das ist ja echt zu Haare zerreisen.

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

- Nun, wenn du mehrere Rechnungsnummern erhälst, so musst du deine Where - Clause so einschränken, so dass nur noch eine selektiert wird, am bestenen natürlich die richtige :-) ..wie diese Einschränkung aussehen soll, kann ich dir mangels deiner Daten auch nicht sagen...

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

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????:(:(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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????:(:(

- Wenn du nur dein SELECT ausführtst, bekommst du ja mehrere Rechnungsnummern, hast du geschrieben ...richtig ? also musst du nur noch aus dem Select den Join zur Prod Tabelle über die Rechnungsnummer machen, so dass eine 1:1 Beziehung besteht zwischen der Tabelle, die du updaten willst und dem SELECT, aus dem du den aktualisierten wert holst.

gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

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..

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...