[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    view-Satz eindeutig identifizieren

    Hi *all
    kann ich in einem create view einen eindeutigen Begriff je Satz vergeben? Habe identity column versucht, das geht aber anscheinend nur bei create table. Lass ich mir im SQL mit RRN(viewname) die Satznr anzeigen, so ist das die Satznr. der 1. Datei und daher manchmal doppelt. Ich suche aber die möglichkeit genau einen 'Satz' der view anzusprechen.
    Ich weiß natürlich, das sich die View immer dann ändert, wenn sich in der View verbundene Dateien ändern.
    Hat jemand eine Idee ?

    Gruß Robi

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    das SQL Construct dafür ist eigentlich select distinct ...
    dann bekommst du immer einen Satz. Was hast du denn wirklich vor?

    mfg

    Dieter Bender

    Zitat Zitat von Robi
    Hi *all
    kann ich in einem create view einen eindeutigen Begriff je Satz vergeben? Habe identity column versucht, das geht aber anscheinend nur bei create table. Lass ich mir im SQL mit RRN(viewname) die Satznr anzeigen, so ist das die Satznr. der 1. Datei und daher manchmal doppelt. Ich suche aber die möglichkeit genau einen 'Satz' der view anzusprechen.
    Ich weiß natürlich, das sich die View immer dann ändert, wenn sich in der View verbundene Dateien ändern.
    Hat jemand eine Idee ?

    Gruß Robi
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Einen eindeutigen Schlüssel bekommst du nur, wenn auch 1 oder mehrere Felder in Kombination eindeutig sind (analog eines UNIQUE-Key's). Da eine View nicht statisch ist, kannst du keine ID generieren.
    Alternativ ist eine UDF (User defined Function) die beim Init (1. Aufruf) eine Zähler startet und bei jedem Aufruf erhöht (Arbeitsbereich der UDF).
    Allerdings kann dieser Wert in keiner Weise als Zugriff dienen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Robi
    Hi *all
    kann ich in einem create view einen eindeutigen Begriff je Satz vergeben? Habe identity column versucht, das geht aber anscheinend nur bei create table. Lass ich mir im SQL mit RRN(viewname) die Satznr anzeigen, so ist das die Satznr. der 1. Datei und daher manchmal doppelt. Ich suche aber die möglichkeit genau einen 'Satz' der view anzusprechen.
    Ich weiß natürlich, das sich die View immer dann ändert, wenn sich in der View verbundene Dateien ändern.
    Hat jemand eine Idee ?

    Gruß Robi
    Wenn Du mehrere Dateien joinst, kannst Du auch für jede Datei die relative Satz-Nr. abfragen. Dein eindeutiger Schlüssel besteht dann aus der Kombination dieser relativen Satz-Nr.
    PHP-Code:
    Create View MySchema/MyView as
    Select RRN(a), RRN(b), a.*, b.*
       
    from FileA a join FileB b on a.Key1 b.Key1 
    Es gibt auch noch andere Möglichkeiten eine laufende Nummerierung zu erhalten.

    Aber alle diese Möglichkeiten führen zu einer extrem bescheidenen Performance, da Indices nur über Spalten in den Basis-Dateien gebildet werden können. Wenn Du also auf solche Konstrukte oder die relative Satz-Nr. zugreifen möchtest, wird wahrscheinlich für jede einzelne Datei ein Table Scan durchgeführt und das dauert u.U. wenn so ein paar Millionchen Sätze in den Dateien vorhanden sind.

    Wenn die einzelnen Dateien jeweils einen unique key haben, so ist der eindeutige Schlüssel in deiner View die Kombination aller dieser Schlüssel-Felder. Greifst Du damit zu, kann der Optimizer die unique constraints oder Indices verwenden um auf die Dateien zuzugreifen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    Danke

    @Dieter
    Eine View wird im Subfile angezeigt, ein 'Satz' wird ausgewählt und an Standard Pgm übergeben. Normalerweise nur die Satznr., und das Standard Programm liest nach. Also brauche ich soetwas wie eine eindeutige Satznr.
    (das mit dem distinct is bekannt, geht hier aber nicht)

    @Fuerchau
    Wenn der Wert nicht als Zugriff dienen kann, nützt es mir leider nix, schade

    @Brigitta
    Könnte gehen. geht dan folgendes ?

    Create View MySchema/MyView as
    Select RRN(a) as RRnA, RRN(b) as RRnB, a.*, b.*
    from FileA a join FileB b on a.Key1 = b.Key1


    select * from MySchema/MyView where RRna=12345 and RRnB=6789

    Ist das schnell genug ?
    gruß
    Robi

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Genau das ist doch das Problem !
    Beim Suchen über RRN wird die gesamte Tabelle gescant, da es keinen Zugriffspfad nach RRN gibt.
    Um also auf RRNA=12345 zuzugreifen werden 12344 Sätze gelesen. Stell dir das nun bei einem Zugriff auf RRNA=12345678 vor ?!?!?

    Um SCHNELL zuzugreifen benötigst du einfach einen EINDEUTIGEN KEY ungleich RRN !
    Ansonsten vergiss SQL und greif per CHAIN auf die PF. Da kannst du dann die RRN verwenden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau
    Genau das ist doch das Problem !
    Beim Suchen über RRN wird die gesamte Tabelle gescant, da es keinen Zugriffspfad nach RRN gibt.
    Um also auf RRNA=12345 zuzugreifen werden 12344 Sätze gelesen. Stell dir das nun bei einem Zugriff auf RRNA=12345678 vor ?!?!?

    Um SCHNELL zuzugreifen benötigst du einfach einen EINDEUTIGEN KEY ungleich RRN !
    Ansonsten vergiss SQL und greif per CHAIN auf die PF. Da kannst du dann die RRN verwenden.
    @Fuerchau
    Kleine Korrektur es werden nicht 12344 Sätze gelesen, sondern 12345678 Sätze inclusive aller gelöschten Sätze, was noch weit schlimmer ist.

    @Robi
    Du hast wirklich nur die Möglichkeit beide relativen Satz-Nr. zu übergeben und dann auf die Original-Dateien mit CHAIN zuzugreifen.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    Hmm,

    Schade,
    da muß ich mir wohl was einfallen lassen

    Ich dank Euch trotzdem für die Antworten.

    gruß
    Robi

Similar Threads

  1. CREATE VIEW
    By Franz Karl in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-01-07, 08:04
  2. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 18:04
  3. Satz löschen - ODBC
    By heini in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-06-06, 11:34
  4. SQL -> CREATE VIEW
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 11-05-06, 14:57
  5. drop view für LF
    By Robi in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-04-05, 16:59

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •