Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1.276
  • Benutzer seit

  • Letzter Besuch

Beiträge von dr.dimitri

  1. 3. Zerstöre ich eventuell die Datenbank durch eine solche Änderung oder kann es sein das der PHP-Code der in der Seiten steckt die zum Shop gehören nicht mehr funzt?
    Eventuell ja. InnoDB unterstützt keine Volltextsuche mit MATCH. Sofern die Anwendung den verwendet wars das.

    Des weiteren kann es durchaus sein, dass die Anwendung diverse Dinge nachprogrammiert die myisam fehlen (Transaktionssicherheit etc.) und die dann mit der InnoDB nicht mehr oder nicht mehr richtig funktionieren.

    Im schlimmsten Fall würde es erst mal augenscheinlich richtig laufen, aber im Laufe der Zeit zu Datenfehlern kommen.

    Sofern der Hersteller dein Vorgehen nicht offiziell unterstützt, machst Du das alles auf eigene Gefahr und im Blindflug.

    Insbesondere Versionsupdates, Patches etc. könnten dann nicht mehr funktionieren bzw. beim Einspielen Schäden verursachen.

    Dim

  2. Mich würde mal interessieren, wozu der OP lauter Outer Joins macht. Da in der WHERE Bedingung nicht auf NULL abgefragt wird, und auch im Ergebnis keine NULL Werte sein können, da ansonstend er DISTINCT nicht eindampfen kann (NULL immer <> NULL) vermute ich mal, dass ein (deutlich schnellerer) Inner Join das gleiche Ergebnis liefern würde.

    Ob ich Group By oder Distinct verwende ist egal - die Datenbank muss die Ergebnismenge immer sortieren.

    Des weiteren wäre noch eine Definition von "flotter machen" wünschenswert. Millionen von Datensätzen durchzunudel dauert eben seine Zeit. Entweder ich schränke die zu durchsuchenden Sätze ein oder ich gebe der DB mehr Ressourcen, damit sie die Arbeit schneller erledigen kann - nachdem ich das SQL optimiert habe.

    Dim

  3. Hi,

    ich kenn zwar wiederum Python nicht, aber die Schritte, die dazu in Java nötig sind kann ich Dir aufzeigen, evtl. geht das analog auch so in Phython:

    1. Voraussetzung: Vorhandener Datensatz mit einem BLOB Feld das einen gültigen Lob Locator besitzt (also EMPTY_BLOB falls nichts drinnen ist, nicht aber NULL!).

    2. Select ... for update und sich den Lob Locator in ein eentsprechendes Objekt laden. In Java würde man das über ein ResultSet machen.

    3. Sich über die Methoden des Blob Objektes einen Outputstream holen und dort den Inhalt der datei reinschreiben.

    4. Commit

    Vielleicht ist hier auch was interessantes für Dich dabei.

    Dim

  4. Doch das geht durchaus. Zum einen sind die von Dir erwähnten Tabellen keine wirklichen Tabellen, sondern dynamische Views, die je nach Berechtigung andere Inhalte haben.

    Schau mal in der all_views, dann findest Du dort auch deine fehlenden Tabellen, die ebenfalls keine Tabellen sind sondern Views auf die Du Select Rechte bekommen hast.

    Dim

  5. Du kannst hier einfach Datumsarethmetik verwenden und das dann in eine Betweenabfrage stellen:

    SELECT TO_CHAR (AB_DATUM, 'DD.MM.') AB_DATUM
    
      FROM t
    
     WHERE ab_datum BETWEEN TRUNC(ab_datum,'MM')+13 AND TRUNC(add_months(ab_datum,1),'MM')-1
    
     ORDER BY AB_DATUM;

    Dim

  6. die ID der gelöschten zeile erhälst du mit OLD.ID

    damit kannst du ja dann prüfen ob es noch datensätze mit dieser ID gibt und entsprechend handeln.

    Mag sein, dass mysql das vielleicht (noch) erlaubt, jede andere vernünftige Datenbank wird beim Versuch aus einem Row Level Trigger auf Tabelle A in Tabelle A zu selektieren einen Fehler werfen.

    Damit ist dieser Vorschlag nicht umsetzbar (im übrigen sollte keine fachliche Logik in einem Trigger abgelegt werden, auch wenn diverse Forenmitglieder dies aufgrund von Bücherwissen befürworten).

    Eine solche Löschlogik lässt sich entweder durch eine entsprechend programmierte Zugriffsschicht lösen, die dann aber auch mit Sperren arbeiten muss, damit man in einem Multiusersystem keinen fachlich inkonsistenten Zustand erhält, oder aber man hat einen Aufräumjob, der die im Laufe des Tages angefallenen Leichen zu definierten Zeiträumen entfernt.

    Dim

  7. ich wage zu bezweifeln, das die Hausnummer wirklich eine eigenständige Information ist und in der Praxis wird ME Strasse und Hausnummer quasi nie getrennt.
    Es gibt diverse Anbieter im Internet (z.B. 1&1) die die eingegebene Adresse validieren. Und dabei wird selbstverständlich die Strasse von der Hausnummer getrennt. Gleiches gilt auch wenn ein Drop Down Menü angegeben wird und man den Straßennamen auswählen kann.

    Nach deinem Beispiel oben müsstest du dann aber auch die Telefonnummer in mehrere Informationen aufspalten
    Ich hoffe nicht, dass das irgend jemand anders macht.

    Dim

  8. Hmm dann hab ich erstmal keine Ahnung. Kannst Du rausfinden welcher Datensatz fehlt? Wenn Du Datensätze aus der csv Datei entfernst, wird dann immer einer zu wenig geladen? Sprich bei nur einem Satz + Header wird kein Satz geladen?

    Vielleicht hat aber auch Corto |sX| wieder eine Idee.

    Dim

  9. allerdings sollen nur die Datensätze mit einer bestimmten Nummer eingefügt werden, wenn diese Nummer in einer anderen Tabelle vorhanden ist.

    Mit dem sqlloader wirst Du das nicht lösen können. Entweder Du verwendest eine externe Tabelle und machst dann dort dein SQL oder Du lädst es in eine Zwischentabelle und machst dann deine Prüfung.

    Alternativ legst Du einen FK Constraint auf die übergeordnete Tabelle (so wie es sein sollte) stellst errors auf eine sehr hohe Zahl damit der Load nicht abbricht und Oracle lehnt die überzähligen Daten von sich aus ab.

    Dim

  10. Es geht hier um Speicher- und Performanceoptimierung. Der SQLLoader schreibt ja direkt in die Tabellen (bzw. der Serverteil des SQLLoader). Für den Ladevorgang wird intern entsprechender Speicher allokiert der dann pro einzulesenden Block belegt wird. Den Speicher immer wieder neu zu allokieren würde natürlich zeit erfordern.

    Noch interessanter wird es bein Direct Load hier wird der Block direkt fertig formatiert ans Ende der Tabelle gehängt.

    Der Loader ist eben für Performance optimiert (wir laden hier Millionen von Datensätzen in Minuten) und dafür muss muss man eben auf der "Bequemlichkeitsseite" ein paar Einschränkungen machen.

    Dim

    PS: Wenn man weiß, dass die Daten nur z.B. 10 Byte lang sind, kann man durch diese Angabe den Ladevorgang natürlich auch schneller machen.

  11. Welchen Zeichensatz verwendet die Datenbank? Je nach Zeichensatz und Zeichen kann ein Zeichen auch bis zu 4 Byte lang sein. Dann ist es noch wichtig, ob die Spalte mit VARCHAR2(1000 Byte) oder VARCHAR2(1000 CHAR) definiert wurde. Je nachdem sind es 1000 Byte oder eben 1000 Zeichen - unabhängig vom Zeichensatz.

    Dim

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