Announcement

Collapse
No announcement yet.

Fehler beim aktualisieren der Tabelle ?????

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler beim aktualisieren der Tabelle ?????

    Hallo Leute,

    ich habe folgendes Skript. Mit diesen versuche leider vergebens die Rechnungstabelle in der Produktion zu aktualisieren.Leider blicke ich nicht mehr durch....... weil es zu Fehlermeldungen kommt.

    Ich würde mich über jede Anmerkung bzw. Korrekturvorschläge freuen.



    create table TabelleKorrektur as
    Select Migration.rechnung_summe NEU,Migration.Kunde_nr,Produktion.rechnung_summe ALT
    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


    UPDATE Prod.Rechnungen@Prod Produktion SET Produktion.rechnung_summe
    = (select korr.rechnung_summe from tblkorrektur korr
    where korr.kunde_nr=Produktion.kunde_nr)
    where Produktion.kunde_nr in(select kunde_nr from TabelleKorrektur)

  • #2
    Hallo,
    Originally posted by z.t.i View Post
    .... weil es zu Fehlermeldungen kommt.
    ...ok, wir könnten versuchen die Fehlermeldungen zu erraten oder deinen Rechner hacken um sie uns anzusehen... Einfacher wäre es natürlich du würdest die Fehlermeldungen(en) hier posten

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      ich muss Falk Recht geben. Aber aud den ersten Blick:

      ein paar Leerzeichen beim Formatieren der SQL´s schadet nie und hilft ungemein.
      Und ich denke tblkorrektur soll nicht TabelleKorrektur sein.
      Sonst sieht es eigentlich richtig aus.

      Comment


      • #4
        Hallo Leute vielen Dank für eure Antworten . Stimmt das habe ich dummerweise vergessen.

        Die Fehlermeldung lautet: ORA-00900: Ungultige SQL-Anweisung. siehe rote Markierung


        UPDATE Prod.Rechnungen@Prod Produktion SET Produktion.rechnung_summe
        = (select korr.rechnung_summe from tblkorrektur korr
        where korr.kunde_nr=Produktion.kunde_nr)
        where Produktion.kunde_nr in(select kunde_nr from TabelleKorrektur)

        Comment


        • #5
          Hallo ich gibs auf,

          Leider weiß ich nicht mehr weiter, jetzt meckert er rum, dass er bei der Unterabfrage mehrere Zeilen liefert und bricht den Vorgang ab. siehe Abfrage unten.

          UPDATE sev.gefahr_objekt_risiko gor SET gor.gor_vers_summe
          =(select korr.NEU from tblmigkorrektur korr
          where korr.police=gor.pol_policen_nr)
          where gor.pol_policen_nr in(select pol_policen_nr from tblmigkorrektur);
          commit;

          Daher habe ich mir eine andere Update-Statement entwickelt.

          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_hhistorie='Aktuell'
          and Migration.rechnung_summe!=Produktion.rechnung_summ e),0)
          commit;


          Nun meine Frage: Mit dieser Abfrage müsste ich theoretischer weise ja auch meine gewünscht Aktualisierung hinbekommen ohne meine Daten zu zerstören oder????

          Comment


          • #6
            Wie sollen wir diese Frage beantworten. Wir können doch gar nicht prüfen, ob dein Join richtig ist. Auf jeden fall ist da eine 'Unschärfe' in letzten Zeile deines zweiten Update: [rechnung_summ e].
            Warum lässt du nicht erst einmal dass commit weg und kontrollierst das Ergebins ? Du scheinst ja in der Tabelle: TabelleKorrektur die richtige Summe schon drin zu haben.

            Comment


            • #7
              Originally posted by uminky View Post
              Wie sollen wir diese Frage beantworten. Wir können doch gar nicht prüfen, ob dein Join richtig ist. Auf jeden fall ist da eine 'Unschärfe' in letzten Zeile deines zweiten Update: [rechnung_summ e].
              Warum lässt du nicht erst einmal dass commit weg und kontrollierst das Ergebins ? Du scheinst ja in der Tabelle: TabelleKorrektur die richtige Summe schon drin zu haben.
              Hallo Uminky,

              mein Join ist richtig. Ich erhalte die richtigen werte, die ich upgedatet haben möchte..

              wenn ich den Commit weglasse, wird die Aktualisierung dann nicht fest eingeschrieben richtig. Heißt es dann, dass wenn, die DB dann runtergefahren wird, dass auch die Aktualisierung weg ist????

              Ich mein zum Testen kann ich den commit weglassen.

              Comment


              • #8
                ja solange du kein COMMIT machst sind die Änderungen nur in deiner Session gültig. Wenn du die DB herunter fährst oder deine Session schliesst, sind die Änderungen verworfen. Obacht!! Ein Exit im SQL+ macht ein Impliziertes Commit (in der Grundeinstellung).

                Also: Erst Updaten, dann überprüfen und wenn das Ergebnis stimmt, dann ein Commit. Ist das Egebnis nicht das von die gewünschte, kannst du ein Rollback absetzen und dein Update noch einmal überarbeiten.

                Comment


                • #9
                  Hallo uminky,

                  super dank für den Tipp.
                  Dann teste ich das mal.

                  Comment


                  • #10
                    Mist immer noch dieser doofer 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.

                    Comment


                    • #11
                      Dann habe ich eine andere Frage,

                      wie kann ich das oben liegende Statement ändern, so dass ich dieses Update für ca 800 rechnungssummen gleichzeitig durchziehen kann.

                      Also ich bin echt fertig mit den nerven. Habe auch gegoogelt usw. aber leider nichts passendes gefunden...

                      Vielleicht kennt sich ja der eine oder andere mit dem Problem aus und kann mir weiterhelfen.

                      Comment


                      • #12
                        zum letzten mal :-( schau dir deine Daten an oder lass es von jemanden machen der das kann.
                        Es steht immer noch: Produktion.rechnung_summ e (mit Leerzeichen vor dem letztene im SQL)

                        SELECT * FROM Prod.Rechnungen Produktion
                        WHERE EXISTS ( 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_hhistorie = 'Aktuell'
                        AND Migration.rechnung_summe != Produktion.rechnung_summ e
                        GROUP BY Migration.rechnung_summe
                        HAVING COUNT(*) >= 2
                        )

                        Comment


                        • #13
                          Hi,

                          Originally posted by uminky View Post
                          zum letzten mal :-( schau dir deine Daten an oder lass es von jemanden machen der das kann.
                          Es steht immer noch: Produktion.rechnung_summ e (mit Leerzeichen vor dem letztene im SQL)

                          SELECT * FROM Prod.Rechnungen Produktion
                          WHERE EXISTS ( 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_hhistorie = 'Aktuell'
                          AND Migration.rechnung_summe != Produktion.rechnung_summ e
                          GROUP BY Migration.rechnung_summe
                          HAVING COUNT(*) >= 2
                          )

                          Ich habe mir die Daten angeschaut um zu prüfen ob da doppelte Einträge vorhanden sind. soweit kann ich auch schon denken... Trotzdem hilft mir dieses Statement mir nicht weiter. Es geht halt darum, dass Oracle mit der Menge der zu aktualisierenden rechnungssummen nicht klar kommt.

                          Meine Frage lautete ja auch ob ich eine andere Alternative habe diesen update für diesen 800 rechnungssummen durchzuführen.

                          Ich bin doch nicht doof und starte sofort einen Update ohne mich mal über die selektierten Werte auseinander zu stezen....

                          Also Wirklich

                          Comment


                          • #14
                            Originally posted by z.t.i View Post
                            Ich bin doch nicht doof und starte sofort einen Update ohne mich mal über die selektierten Werte auseinander zu stezen....

                            Also Wirklich

                            Uminky will dir doch nur beibringen, dass du deine Daten gar nie prüfen kannst, weill dein SQL schon syntaktisch FALSCH ist....

                            :-(




                            Gruss

                            Comment


                            • #15
                              Ich habe das doch schon eingesehen, dass ich die rechnungssumme hier falsch reinkopiert habe.

                              Dieses Problem ist das minimalste für mich. das ist ja kein Ding.

                              Man muss ja auf eine andere Frage nicht so reagieren finde ich!!!
                              Ich will das auch nicht in die länge ziehen. Ich bednake mich für eure konstruktiven Beiträge die ihr mir heute gegeben habt.

                              Muss wohl versuchen das Problem anders anzufassen.

                              Comment

                              Working...
                              X