dr.dimitri
-
Gesamte Inhalte
1.276 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von dr.dimitri
-
-
Um welche Datenbank handelt es sich? Ggf. könnte man einfach mit einem regulären Ausdruck arbeiten oder eben lauter LIKE '%1%' OR LIKE '%2%' etc miteinander verknüpfen ggf. mit einer Negation - das wäre aber sicherlich die hässlichste Lösung.
Dim
-
Wenn Du dein Studium einigermaßen vernünftig hinbekommst, dann sind Deine Chancen sicherlich nicht schlechter als die von anderen Studenten.
Dim
-
Eventuell ja. InnoDB unterstützt keine Volltextsuche mit MATCH. Sofern die Anwendung den verwendet wars das.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?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
-
Und wieso verwendest Du jetzt Outer Joins?
Dim
-
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
-
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
-
-
Eine ganz einfache Lösung:
Lösch den Trigger und liefere aus Deinem Programm das Passwort bereits als MD5 Hash so wie es sich gehört. Trigger sind eben nicht dazu da fachliche Logik in der Datenbank abzulegen.
Dim
-
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
-
Warum so kompliziert?
Weil bei meiner Variante ein Index auf ab_datum verwendet werden kann und bei Deiner nicht.
Dim
-
Was bitte ist die MERGE Engine? Ich kenne den MERGE Befehl aber das ist keine Engine.
Dim
-
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
-
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
-
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.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.
Ich hoffe nicht, dass das irgend jemand anders macht.Nach deinem Beispiel oben müsstest du dann aber auch die Telefonnummer in mehrere Informationen aufspaltenDim
-
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
-
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
-
Passen denn die Daten die er geladen hat von der Struktur her oder lädt er nur bis zur 3. Spalte? Sind es wirklich 1425 Datensätze?
Dim
-
-
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.
-
Weil es so in der Doku steht. Tabelle 8-6.Wieso er das macht, hab ich nie herausfinden können.Wenn Du keinen Wert angiebst wird eben der Defaultwert verwendet.
Dim
-
Fast richtig. Es sind 255 Zeichen. Aber das könnte das Problem sein.endlich kann ich n00b mal den Doktor vorführenDas ist ein Prob des Sqlloaders, er hat default nur 256 Byte pro Spalte.
Dim
-
Korrekt.
-
-
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
SQL-Abfrage schneller machen?
in Datenbanken
Geschrieben
Und ich stelle meine Frage zum dritten mal:
Benötigst Du wirklich OUTER JOINS (oder LEFT JOINs wie man sie auch nennt).
Dim