Zum Inhalt springen

dr.dimitri

Mitglieder
  • Gesamte Inhalte

    1.276
  • Benutzer seit

  • Letzter Besuch

Beiträge von dr.dimitri

  1. Der Ausdruck

    :Liste = ''
    wird bei Übergabe von '' an Liste zu
    '' = ''
    , was immer trueergibt. Wird das mit der anderen Bedingung OR-verknüpft ergibt es auch immer true und damit wird die ganze Liste ausgegeben.
    Grundsätzlich ist der Ansatz richtig, wenn die DB '' wirklich als Leerstring - also einen String mit der Länge 0 Byte ansieht. Für Oracle z.B. ist ein '' aber NULL. Damit würde im SQL stehen
    NULL = NULL
    Da NULL immer ein undefinierter Wert ist, ist der Vergleich immer false - es wird also kein einziger Wert zurückgeliefert :cool: Kleines Beispiel:
    SQL> select count(*) from all_objects where ''='';
    
    
      COUNT(*)
    
    ----------
    
             0
    
    
    SQL> select count(*) from all_objects where 1=1;
    
    
      COUNT(*)
    
    ----------
    
         55677
    
    
    SQL> select count(*) from all_objects where NULL IS NULL;
    
    
      COUNT(*)
    
    ----------
    
         55677
    
    
    SQL>

    Dim

  2. Hi,

    Wissen, sofern es korrekt ist, schadet nie.

    Insofern würde ich dir empfehlen, installier dir auf deinem PC die Oracle 11 XE Datenbank

    Oracle Database Express Edition 11g Release 2

    bezüglich ADF findest Du hier einen guten Einstieg:

    Oracle Application Development Framework - Oracle ADF

    Bezüglich der Oracledatenbank selbst sind die Bücher von Tom Kyte sehr lesenswert.

    Da zu sitzen und auf die Schulung zu warten ist eine Möglichkeit, selbst Wissen anzusammeln (besonders wenn es sich um so ein Interessantes Thema handelt) ist besser.

    Dim

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

  4. Das stimmt, ich meine mich z.B. bei Postgres daran erinnern zu können, dass man aus einer Prozedure auch mit anderen aktuell laufenden Sessions Daten austauschen kann, also so etwas wie ein Semaphor. Wenn man das nimmt, dann könnte man eben prüfen, ob eine andere Session kollidieren würde. Aber das nur so am Rande

    Vermutlich so etwas ähnliches wie DBMS_PIPE in Oracle. Aber da ist mir der Unique Constraint doch lieber ;)

  5. Bei Postgres sind Prozedure automatisch atomar und wenn man sie nochmals in eine Transaktion packt, dann laufen sie im Kontext der Transaktion

    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

  6. Das geht nur, wenn der Datensatz eindeutig ist und ist dann auch die erste Wahl, wenn aber eine Teilmenge betrachtet werden soll, dann bietet sich ein Trigger an.

    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

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

  8. Desweiteren wär ich auch jedem dankbar, der mir einen Tipp geben kann, was ich beruflich machen könnte, ohne sich jetzt mit einem Hungerlohn rumärgern zu müssen. Dazu muss ich sagen, dass ich nicht handwerklich begabt, oder ein Verkäufertyp bin.

    Was kannst Du denn? Mal von handwerklichen Dingen und Verkäufertätigkeiten abgesehen?

    Dim

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

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

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

  12. Aber wenn du sagst, dass es Oracle zum Download gibt (hoffe doch kostenfrei, da ich momentan kein Geld für Sonderausgaben habe), dann werde ich das einfach mal in Angriff nehmen und es direkt über Oracle bauen und dann einfach nur noch importieren... :D:D;)

    otn.oracle.com Lediglich eine Registrierung ist nötig.

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