Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1.276
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von dr.dimitri

  1. Hi, so eine Ausgabe würde ich in zwei Schritten realisieren. Zum einen die betreffenden Bandnamen sotiert selektieren und anschließend pro Bandname die zugehörigen Alben ebenfalls sortiert selektieren. D.h. du hast zwei Schleifen: Eine äußere über die Bandnamen und die innere über die zugehörigen Alben. Dim
  2. Dein SQL liefert sicherlich nicht die Ausgabe, die Du gepostet hast. Du selektierts eine ID und Edition_ID postest aber mit Semikolon getrennte Bandnamen? Aber wenn man sich das oft genug durchließt, kommt man irgendwie drauf, was Du haben möchtest und was du momentan machst. Du möchtest nicht nur Sortieren, sondern auch Pivotieren (und nicht gruppieren) und zwar innerhalb einer Sammlung alle Alben in einer Zeile alphabetisch. Ich weiß nicht, ob das in mysql per Befehl möglich ist, dazu kenne ich die DB zu wenig. Dim
  3. Was genau passt dann nicht? Wie soll die Sortierung aussehen (Beispiel) und wie sieht das SQL momentan aus?
  4. Hi, typisch mysql. Die GROUP BY Klausel ist falsch, mysql meldet das aber nicht. Jedes Feld, dass im SELECT nicht in einer Aggregatsfunktion (COUNT,MAX,MIN,SUM etc)hinterlegt wird, muss in die GROUP BY Klausel. Jede andere DB würde dein Statement nicht ausführen. Dim
  5. Vermutlich so etwas ähnliches wie DBMS_PIPE in Oracle. Aber da ist mir der Unique Constraint doch lieber
  6. Mir ging es hier insbesondere um Multiuserzugriffe. Sprich Session A fügt die Zahl 100 ein, hat aber noch nicht comittet, Session B prüft, ob die Zahl 100 schon vorhanden ist und bekommt eine leere Menge zurück, fügt sie also auch ein. Nachdem beide Sessions comittet haben steht zweimal die Zahl 100 drinnen. Daher der "Lösungsansatz" mit dem exklusiven Sperren der Tabelle, dann kann nur eine Session in der Tabelle ändern, die anderen müssen warten. Ist natürlich nicht praktikabel aber zumindest eine (rein) theoretische Lösung. Dim
  7. Vgl: Der Trigger soll gucken, ob der Integerwert den die Prozedur übergeben bekommen hat, bereits vorhanden ist. Wo ist da eine Teilmenge? Und nachsehen, ob eine Zahl schon vorhanden ist, hört sich ganz verdächtig nach "Eindeutigkeit" an. Des weiteren sieht ein Trigger keine offenen Transaktionen und kann daher nicht prüfen, ob die Zahl wirklich nicht schon eingefügt wurde, aber der Commit noch nicht durch ist. Verwendet man einen Dirty read (ist per Definition aber schon ein Bug in jeder DB Anwendung und daher auch nicht in allen Datenbanken verfügbar), dann kann man nicht sicher sein, ob die Zahl vielleicht nicht per Rollback wieder verschwindet und man aber einen schon vorhandenen Wert ermittelt hat, der jetzt aber nicht mehr da ist. Die einzigen, sauberen (=fehlerfreien) Möglichkeiten sind: * Serialisieren des Zugriffs, sprich exclusives sperren der Tabelle, dann in der Prozedur per SQL nachsehen, ob der Wert schon vorhanden ist. Warum hier überhaupt ein Trigger verwendet werden soll ist mir eh nicht klar, ebensowenig, ob man den Zugriff serialisieren möchte. Vermutlich eher nicht * Verwenden eines Unique Constraints und die DB ihren Job machen lassen. Andere "Methoden" führen, auch bei Teilmengen, dazu, dass der Datenstand bei bestimmten Konstellationen fachlich inkonsistent werden kann und vermutlich auch wird. Dim
  8. Hi, leg einen Unique Constraint auf die Spalte und die DB erledigt das für dich. Das in einem Trigger zu erledigen ist ein klarer Bug im Anwendungsdesign und kann doppelten Einträgen führen. Den Fehler, den die DB bei einem doppelten Wert erzeugt kannst Du dann in der Prozedur abfangen. Dim
  9. Hi, ist auch die Ländereinstellung auf dem Client korrekt gesetzt? Also NLS_LANG=German_Germany.AL32UTF8 Dim
  10. Da nur Oracle weiß, wieviele Duplikate es auf einem Block gibt, wirst Du dieses Package verwenden müssen. Bei kleinen Tabellen bringt das eh nicht viel, und bei großen gibt mit dem Package kein Problem. Dim
  11. Hi, was hat sich seit damals geändert? http://www.fachinformatiker.de/datenbanken/152977-dbms_compression-get_compression_ratio.html Dim
  12. Hi, ich kann nur sagen, dass es aus meiner Sicht mehrere Punkte gibt: (1) Etwas Glück. Man muss zur richtigen Zeit am richtigen Ort mit den richtigen Chefs sein. (2) Positiv Auffallen. Wer in der Masse untergeht, nur Anweisungen umsetzt und brav seinen Job macht, wird nichts riskieren aber auch nicht viel gewinnen. (3) Eigeninitiative. Wenn man etwas verbessern kann, dann soll man es auch tun. Absprechen, klären, umsetzen. Nicht drauf warten, dass es ein anderer macht. Siehe auch den vorhergehenden Punkt. (4) Verantwortung übernehmen. Wenn man für eine bestimmte Anwendung bzw. Anwendungsteil ein kompetenter Ansprechpartner ist, werden auch die Punkte 2 und 3 leichter. (5) Besser sein als die anderen. Such dir ein bestimmtes Gebiert, dass sich interessiert und idealerweise mit (4) zusammenhängt und werde darin besser als andere - wirklich besser, nicht nur schlau reden. Der 10. Java Entwickler im Team ist schön und gut, aber der Kollege, der sich perfekt mit security, Datenbanken etc. auskennt wird sich auch mit Punkt (2) leichter tun. (6) Eigeninitiative und Verlässlichkeit. Die richtige Mischung aus Teamfähigkeit und Eigeninitiative ist Gold wert. Jeder Chef, der bereit ist gute Leistung entsprechend zu honorieren, ist um jeden Mitarbeiter froh, den man nicht alles vorkauen muss, sondern der macht und zwar so, dass es passt. Wenn das alles nichts hilft, muss man über geeignete Maßnahmen dem Punkt (1) etwas auf die Sprünge helfen. Dim
  13. :upps Recht viel eindeutiger kann eine Meldung aber nicht sein oder? Die Ersparniss bei 109 Zeilen kann ich dir auch so sagen: Nix. Weißt Du denn, wie die Kompression in Oracle funktioniert? OLTP Compression ist übrigens lizenzpflichtig falls Du die verwenden möchtest. Dim
  14. Was kannst Du denn? Mal von handwerklichen Dingen und Verkäufertätigkeiten abgesehen? Dim
  15. dr.dimitri

    Shrink space

    Richtig. Wenn Du keinen Zieltablespace angiebst, wird Tabelle innerhalb des momentanen Tablesapce verschoben und evtl. freier Platz in diesem Zuge wieder freigegeben. Dim
  16. dr.dimitri

    Shrink space

    Hi, vermutlich liegt die Tabelle auf einem Tablespace mit manuellem Spacemanagement (=mittelalterlich). alter table xyz move sollte funktionieren. Dim PS: analyze sollte nicht mehr verwendet werden. Als Ersatz gibt es das DBMS_STATS Packages
  17. Von der Normalisierung abgesehen fällt sofort auf, dass die Tabellen Kunde und Bücher (man sollte sich durchgängig für Singular oder Plural entscheiden) einen fachlichen Wert als PrimaryKey verwenden. das mag vielleicht theoretisch ok sein, in der Praxis ist das häufig eine fatale Fehlentscheidung, da sich fachliche Werte im Laufe der Zeit auch ändern können. Daher niemals einen fachlichen Wert als PK verwenden.
  18. Schon klar, aber bisher nimmt man anscheinen noch gar nichts Zumindest steht davon nichts im Projektantrag.
  19. Hi, vielleicht per Oracle Application Express und einer Oracle XE Datenbank. Oracle Database Express Edition 11g Release 2 und Oracle Application Express Damit kannst Du dir die Oberfläche relativ einfach erstellen, fachliche Logik wird dann als PL/SQL in der Datenbank abgelegt. Mit welchen Programmiersprachen hast Du denn schon intensiver gearbeitet? Dim
  20. Die Emailadresse hat damit gar nichts zu tun. Die DB Software die du runtergeladen hast, ist 1:1 die, die Du auch bekommst, wenn Du sie kaufst. Die Standarduser sind system und sys. Mit denen kannst Du dich via sqldeveloper anmelden und mittels create user (vgl. auch die Oracle Doku) dann deine benötigten User anlegen.
  21. Was genau hast Du denn gemacht, nachdem Du die Software runtergeladen hast?
  22. otn.oracle.com Lediglich eine Registrierung ist nötig. Dim
  23. Eine VIEW ist nur eine weitere Abstraktion einer Abfrage. Da läuft nichts schneller, es wird nur Komplexität verborgen. Das ist auch der erste Punkt warum man eine View verwendet. Der zweite Punkt wären Berechtigungen. Ich stelle eine View zur Verfügung, die nur bestimmte Daten selektiert. Anschließend vergebe ich die Berechtigungen, damit ein bestimmter Benutzerkreis diese View lesen darf. Ein dreitter Punkt wäre, dass Programme hin und wieder eine Tabelle benötigen um daraus zu lesen. Habe ich keine Tabelle in der geeigneten Form, kann ich dem Programm evtl. auch eine VIEW unterjubel, die sich nach außen hin wie eine echte Tabelle verhält (solange ich dort nichts ändern möchte). Mit Geschwindigkeit hat eine VIEW rein gar nichts zu tun. Sie ist nicht schneller oder langsamer, als wenn ich das zugrundeliegende SQL direkt ausführen würde.
  24. Also wenn es um Oracle geht, kann ichja auch mal meinen Senf dazu geben 1. Die Uraltaussagen, dass Dokumente in der Datenbank die Performance verschlechtern ist, was Oracle betrifft, schlicht und ergreifend falsch. Oracle speichert BLOB bzw. CLOB Daten nicht in der Tabelle selbst (bzw. maximal 4000 Byte) sondern legt dort nur einen sog. LOB Locator ab. Dieser ist ein Zeiger, der dann auf die ausgelagerten Daten verweißt. Ab Oracle 11 gibt es sog. Secure Files, die den BLOB Datentyp ersetzen und einen Zugriff auf die Daten ermöglichen, der praktisch genauso schnell ist, als wenn das Dokument direkt auf der Platte liegt. 2. Der Vorschlag in der DB einen Link zu speichern ist mindestens genaus falsch, denn damit kaufst Du dir direkt folgende Probleme ein: * Keine Transaktionssicherheit * Kein einheitliches Backup/Recovery, du musst immer auch das Filesystem mitsichern und mit der DB im Rücksicherungsfall konsistent halten. * Kein indizierter Zugriff auf die Daten. Oracle indiziert LOBs, und ermöglicht so einen sehr schnellen Zugriff auf z.B. das 1000000 Millionste Byte eines 3GB Dokumentes * Volltextindizierung der Dokumente durch Oracle Text ist nicht möglich * Die weiteren, schon von streffin genannten Punkte Es gibt einige Besonderheiten, die man im Umgang mit BLOBs/SecureFiles wissen muss. Um das Lesen der Doku kommst Du also nicht herum. Warum baust Du deine Testversion nicht gleich mit Oracle? Du kannst die verwendete Version herunterladen bzw. die Oracle Express verwenden. Dim
  25. VALUES wird nur verwendet, wenn Du einzelne Werte einfügst. Ansonsten lautet die Syntax: INSERT INTO tabelle (col1,col2,col3,...) select colX,colY,colZ,... FROM... Evtl. mag mysql die Klammern im SELECT Statement nicht. Des weiteren wäre es sehr nützlich, wenn Du die Aussage "es geht nicht" mit einer aussagekräftigen Fehlermeldung anreicherst, und ggf. dein Statement mal direkt viy phpmyadmin o.ä. auf der Datenbank testest 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...