[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2008
    Beiträge
    70
    Hallo Holger, danke für die Antwort.
    Es war angedacht, dass wir für eine Liste von Benutzern die wir Beispielsweise in unserer eigenen Menüverwaltung haben zusätzliche Systemwerte anzeigen, wie z.B. Letzte Logindatum.
    Kannst du zu 1) nochmal genauer schildern, was du damit meinst?
    Den
    DSPFD QSYS2/USER_INFO habe ich ausgeführt - auf welche Zahl soll ich achten?

    Kann zu Fragen 4-6 noch jemand eine Hilfe abgeben?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Wie Holger schreibt, viele neue SQL-Funktionen sind i.W. nur wegen des iSeries Navigator entstanden, da Java eben nicht so einfach auf API's zugreifen kann.
    Daher sind diese SQL-Funktionen eben Wrapper auf API's.
    Und wenn du dir die API's ansiehst, dann kannst du verstehen, warum das so lange dauert.
    Des weiteren liefern die Table-Function i.d.R. eben alles was du dann per Where-Klausel wieder ausfilterst.
    Dabei haben die API's häufig eigene Filterkriterien.

    Wenn du eine eigene Table-Function schreibst, dann sorge doch dafür dass du optionale Parameter bereits als Filterkriterium übergeben kannst!
    Damit sparst du dir auch hier bereits den vollen Aufbau um anschließend wieder nicht gewünschtes auszufiltern.

    Bei der Declaration von UDF's und UDP's müssen die Ein-/Ausgabeparameter gezielt deklariert werden, dadu ja im SQL-Body oder dem externen Programm ja noch diverse Änderungen an den Werten und somit auch den Typen vornehmen kannst.
    Bei der Übergabe passieren dann wieder Autocasts.

    Ich glaube nicht, dass MQT's auch auf Table-Functions funktionieren, ggf. weiß Birgitta da weiter.
    I.d.R. machen MQT's an Hand bestimmter Kriterien ihre Updates, was bei UDTF's ja nicht klappen kann.

    Was deinen Fehler angeht, so starte den Debugger und schaue die Fehlermeldungen dazu an.
    Das kann an Parameterfehlern liegen als auch an falscher Interpretation der Aufgabenstellung.
    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

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.714
    Zitat Zitat von Gutmann Beitrag anzeigen
    Hallo Holger, danke für die Antwort.
    Es war angedacht, dass wir für eine Liste von Benutzern die wir Beispielsweise in unserer eigenen Menüverwaltung haben zusätzliche Systemwerte anzeigen, wie z.B. Letzte Logindatum.
    Kannst du zu 1) nochmal genauer schildern, was du damit meinst?
    Den
    DSPFD QSYS2/USER_INFO habe ich ausgeführt - auf welche Zahl soll ich achten?

    Kann zu Fragen 4-6 noch jemand eine Hilfe abgeben?
    Also keine Systemwerte anzeigen, sondern Attribute eines Userprofils, dafür gibts das CL Command RTVUSRPRF (auch via SQL aufrufbar). Das könnte flotter sein, als eben die USER_INFO abzufragen. Im DSPFD nicht auf eine Zahl achten, sondern runter blättern und das SQL anschauen und auswendig lernen - das muss nämlich jedes Mal ausgeführt werden ;-)

    Fragen 4-6 dürften sich erledigen (falls nicht generell gemeint), wenn Du den einfachen Weg über die altmodische Variante (siehe oben) gehst.

    Ach ja - arbeitet Ihr mit GreenScreen und RPG/CL oder mit einer PC-basierten Anwendung, die per ODBC/JDBC/SQL zugreift?

    -h
    IBM Champion 2022, 2023, 2024, 2025
    Common Europe Advisory Council / Hall of Fame
    http://pub400.com
    visit www.POWERbunker.com for bespoke IBM i hosting

  4. #4
    Registriert seit
    Sep 2008
    Beiträge
    70
    Zitat Zitat von holgerscherer Beitrag anzeigen
    dafür gibts das CL Command RTVUSRPRF (auch via SQL aufrufbar). Das könnte flotter sein, als eben die USER_INFO abzufragen.

    Ach ja - arbeitet Ihr mit GreenScreen und RPG/CL oder mit einer PC-basierten Anwendung, die per ODBC/JDBC/SQL zugreift?

    -h
    Danke für die Antworten. Dann bleiben noch zwei Fragen.

    Die UDF besteht ja nur aus einem SELECT * FROM - was soll ich da debuggen?

    Holger, wie führst du das denn über SQL aus?

    Das entscheidende ist halt, ich habe eine Liste von Usern und muss dazu die korrespondierenden Infos des Benutzerprofils dazu mappen. Ein Parameter für die Funktion kann ich also nicht vornehmen. Die Infos wenn wirklich in einer Tabelle wären die einfach gejoined werden kann wäre schon hübsch.

    Wir arbeiten sowohl als auch mit ODBC aber auch nativ auf der i mit RPG/CL.

    Wäre die QSYRUSRI wie hier eine Option?
    https://www.ibm.com/support/pages/ex...g-qsyrusri-api
    Ich müsste halt dann N-mal pro Userprofil das ich anzeigen will die Infos dazu lesen.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    Mach mal einen DSPFD der View für die UserInfo.
    Dort kannst du dir den SQL genau ansehen.
    U.U. wird in from "table(getirgendwas(p1, p2))" gelesen, da durchaus 2 API's eine Rolle spielen können.
    Ein List-API für USRPRF-Objekte und ein USRINFO-API je User.
    Somit könntest du die Inner-Function ganz genauso aufrufen.
    Ich kann das i.M. nicht online verifizieren, aber es aber bei anderen Systemviews genau so gesehen.
    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

  6. #6
    Registriert seit
    Sep 2008
    Beiträge
    70
    Hallo Herr Fürchau, a
    lso das CREATE bzw. das FROM sieht wie folgt aus:
    Code:
    SELECT * FROM TABLE (QSYS2.OBJECT_STATISTICS('QSYS      ','USRPRF ',NULL)) a, lateral (SELECT * FROM TABLE (QSYS2.QSYUSRINFO(a.OBJNAME)) as x) as b;
    Wenn ich das so ausführe braucht es immerhin nur 500 ms.
    Die Objectstatistics allein bringt mir nichts, die qsyusrinfo aber auch nicht, da hier der User fehlt. Da es ja nicht nur um den einen geht, muss ich sie eben joinen über den LATERAL SELECT wie oben zu sehen.
    Den Befehl DSPFD kannte ich so gar nicht, ich bin immer über SCHEMATA u. SQL generieren gegangen
    Wenn ich nun aber eine View anstelle der UDF mache, wie kriege ich das dann mit den Rechten hin?

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    "QSYS2.OBJECT_STATISTICS('QSYS ','USRPRF ',NULL)"

    Die Funktion nimmt 3 Parameter:
    1. Lib
    2. ObjType
    3. wahrscheinlich OBJNAME, wobei NULL dem *ALL entspricht.

    Wahrscheinlich kann man das auch für andere Objekttypen verwenden.

    "QSYS2.QSYUSRINFO(a.OBJNAME)"

    Damit hast du doch genau die Funktion, die du eigentlich willst:
    Parameter dürfte der Username sein, was durch den Join vom 1. API ermittelt wird.

    SELECT * FROM TABLE (QSYS2.QSYUSRINFO("MEIER"))

    sollte also genau von enem User die Info bringen.
    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

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    Zitat Zitat von Gutmann Beitrag anzeigen
    Hallo Holger, danke für die Antwort.
    Es war angedacht, dass wir für eine Liste von Benutzern die wir Beispielsweise in unserer eigenen Menüverwaltung haben zusätzliche Systemwerte anzeigen, wie z.B. Letzte Logindatum.
    Kannst du zu 1) nochmal genauer schildern, was du damit meinst?
    Den
    DSPFD QSYS2/USER_INFO habe ich ausgeführt - auf welche Zahl soll ich achten?

    Kann zu Fragen 4-6 noch jemand eine Hilfe abgeben?
    Table Functions sind Murks, wenn anschließend ein Index für effektiven Zugriff benötigt würde. Beispielsweise bei ORDER BY, WHERE, JOIN - also fast immer. Dann geht nämlich die Verarbeitungszeit hoch und die Aktualität der Daten runter. Mit MQTs kann man die Zugriffszeit zu Lasten der Aktualität verbessern, das ist die Datenbank Variante zu eurer Snapshot Lösung. Murks * Murks (Table Function auf Table Function) hebt sich nicht weg, sondern potenziert sich.

    Einzelne virtuelle Felder implementiert man besser als SQL Functions, die man auch in Views verwenden kann. Durch intelligentes caching kann man auch mehrere Attribute auf einmal holen und einzeln in Functions liefern.

    In eurem skizzierten Fall handelt es sich um Daten, die sich selten ändern. Da ist das sauberste einen Startbestand zu erzeugen (den habt ihr ja bereits) und dann die Änderungs Events automatisch einzupflegen. Die Änderungsevents kriegt man hier über das Audit Journal mit RCVJRNE. Mit dieser Strategie kriegt man auch die Security Probleme einfach und sauber gelöst.

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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.748
    So, ich konnte dies nun mal verifizieren:

    SELECT * FROM TABLE (QSYS2.QSYUSRINFO('BFUERCHAU'))

    kommt zum gewünschten Ergebnis. Etwas Mühe macht dann noch die Spaltenüberschrift, aber die steht a in SYSPARMS.
    SELECT * FROM sysparms WHERE SPECIFIC_NAME = 'QSYUSRINFO' and
    SPECIFIC_SCHEMA = 'QSYS2'

    Dasselbe gilt auch für die Object-Function:
    SELECT * FROM TABLE (QSYS2.OBJECT_STATISTICS('QSYS ','USRPRF', 'BFUERCHAU'))

    Man kann hier alle Objektarten und Namen verwenden und es ist auch sauschnell.
    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

Similar Threads

  1. FTP in QSYS oder IFS
    By sisarr in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 29-09-19, 20:46
  2. cpytostmf frommbr mit Qsys.lib ohne /
    By Robi in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 05-10-16, 17:10
  3. Tabelle aus QSYS.LIB nach QDLS kopieren
    By TARASIK in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 26-03-03, 11:03
  4. PRTF QSYS/QPQXPRTF
    By Bodo Roggenkamp in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 24-10-02, 12:29
  5. Pgm QSPGETF in QSYS
    By Bodo Roggenkamp in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-10-01, 14:04

Tags for this Thread

Berechtigungen

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