Announcement

Collapse
No announcement yet.

missing SET keyword (oracle) Geschichte

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

  • missing SET keyword (oracle) Geschichte

    Hallo an alle,

    ich möchte folgendes Select in folgendes Update "umwandeln":

    Code:
    SELECT artikel.artnr, artikelerg.freifeld1 
    FROM artikel 
    LEFT JOIN artikelerg
    ON artikel.artnr=artikelerg.artnr
    where artikel.artnr like 'R%' and freifeld1 like ''
    order by artikel.artnr
    funktioniert!

    Code:
    UPDATE artikelerg
    RIGHT JOIN artikel
    ON artikel.artnr = artikelerg.artnr
    SET artikelerg.freifeld1 = '55'
    WHERE artikel.artnr like 'R%' 
    AND artikelerg.freifeld1 LIKE ''
    ORDER BY artikel.artnr;
    funktioniert nicht!

    Nun haben meine Recherchen ergeben, dass ich so ein UPDATE über zwei Tabellen (in Oracle) nicht machen kann

    Jetzt sieht das ganze so aus:

    Code:
    UPDATE artikelerg 
    SET artikelerg.freifeld1 = '55' 
    WHERE artikelerg.artnr = 
    (SELECT artikel.artnr FROM artikel WHERE artikelerg.artnr = artikel.artnr)
    Ich hatte erst die beiden anderen Bedingungen vergessen und es hat funktioniert (nur Demo-DB ) In ca. 700 Datensätzen steht jetzt in der Spalte freifeld1 die 55 drin.


    Dann hab ich die beiden zusätzlichen Bedingungen hinzugefügt:

    Code:
    UPDATE artikelerg 
    SET artikelerg.freifeld1 = '33' 
    WHERE artikelerg.artnr = (select artikel.artnr from artikel where artikelerg.artnr = artikel.artnr)
    AND artikel.artnr LIKE 'R%' 
    AND artikelerg.freifeld1 LIKE ''
    Das Ergebnis:
    Request OK, 0 rows affected.

    Klar, das funktioniert nicht. Die Spalte Freifeld1 in der Tabelle Artikelerg hat an sich keine leeren Felder, d.h. die Artnr, die in Artikel vorhanden sind, existieren in Artikelerg noch nicht, weil freifeld1 leer ist. (oder?)

    Außerdem scheint die Tabelle Artikel nach der Klammer ja unbekannt zu sein:
    Error 20904, position 0: ORA-00904: "ARTIKEL"."ARTNR": invalid identifier


    Kann jemand noch nachvollziehen was zu tun ist?


    Vielen Dank schonmal!

  • #2
    Kann jemand noch nachvollziehen was zu tun ist?
    Ja: schreib das betreffende AND in die korrelierende Subquery (so nennt man das Subselect in den Klammern).

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Und der Rest ist ok? Inhaltlich?
      Also ist das letzte Update wirklich das Pendant zum ersten?

      Ich versteh das ganze nicht so richtig, warum zeigt mir denn das Select immernoch Ergebnisse? Es dürften doch keine leeren Freifeld1 mehr da sein, wo die Artikelnummer mit R anfängt, oder? Ich finde zwar auch welche mit 33 aber wieso auch leere?

      Code:
      SELECT artikel.artnr, artikelerg.freifeld1 
      FROM artikelerg 
      RIGHT JOIN artikel
      ON artikel.artnr=artikelerg.artnr
      where artikel.artnr like 'R%' and freifeld1 like ''
      order by artikel.artnr
      Zuletzt editiert von aaagi; 05.05.2010, 10:24.

      Comment


      • #4
        Hallo,
        Originally posted by aaagi View Post
        ...Ich versteh das ganze nicht so richtig, warum zeigt mir denn das Select immernoch Ergebnisse?
        Weil das:
        [highlight=sql]
        SELECT artikel.artnr
        FROM artikelerg
        RIGHT JOIN artikel
        ON artikel.artnr=artikelerg.artnr
        where artikel.artnr like 'R%'
        and freifeld1 like ''
        order by artikel.artnr
        [/highlight]
        nicht dasselbe ist wie:
        [highlight=sql]
        select artikel.artnr
        from artikelerg
        WHERE artikelerg.artnr = (
        select artikel.artnr
        from artikel
        where artikelerg.artnr = artikel.artnr
        AND artikel.artnr LIKE 'R%'
        AND artikelerg.freifeld1 LIKE '')
        [/highlight]

        Das Erste ist deine Abfrage und das Zweite das auf ein Select übertragene Update.

        Ausserdem ist eine Abfrage LIKE '', also ohne % etwas overdozed. Wobei auch noch zu beachten wäre, dass Oracle keine leeren Strings '' kennt, sondern diese automatisch NULL sind.

        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


        • #5
          alles klar, vielen dank!

          Comment

          Working...
          X