Veröffentlichen einer UDF
- Dieses Thema hat 7 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 6 Monaten von
Anonym.
-
AuthorPosts
-
17. März 2009 um 16:06 Uhr #4025
AnonymInaktivHallo,
ich bin mal wieder am Thema UDF … Jetzt habe ich eine geschrieben und CREATED. Ich kann die auch unter QMF nutzen.
Wie kann ich die so für die Allgemeinheit definieren, dass die wie jede andere vorgegebene Funktion aufgerufen werden kann. Bei mir ist es nur unter Verwendung von Schema.Name für andere möglich.
Was muss ich bei Packages beachten? MÜSSEN die alle in die QMF-Collection gebunden werden oder muss dem QMF-Plan eine weitere Collection mitgegeben werden?
Wie bekomme ich die für Anwendungsprogramme aktiv? Ich kann doch nicht für alle möglichen Collections ein CREATE Funktion absetzen und Packages erzeugen … Oder doch *grübel* ?Danke…
Alexander
19. März 2009 um 9:47 Uhr #4196
AnonymInaktivkann ein Installation-SysAdm eine UDF unter dem Schema "SYSFUN" anlegen?
Wenn ich eine Collection fest in die CURRENT PACKAGE PATH aufnehme, hat das laufzeitmässig Auswirkungen auf alle anderen laufenden Programme? CurPPath wird ja vorrangig behandelt; ein Package hat dann also einen Suchpfad mehr (als über den Plan vorgegeben).Danke
Alexander
19. März 2009 um 11:22 Uhr #4324
AnonymInaktivAlexander wrote: kann ein Installation-SysAdm eine UDF unter dem Schema "SYSFUN" anlegen?
AlexanderIn Version 8 nicht, in Version 9 teilweise:
generell gilt für derartige "spezielle" Schemanamen:
SYSADM and SYSTOOLS are valid schema names. Â Â Â Â Â Â Â Â Â Â Â Â Â
SYSPROC is a valid schema name for stored procedures. Â Â Â Â Â Â Â Â
SYSIBM is a valid schema name for a stored procedure when the current
application process has the SYSADM or SYSCTRL privilege. Â Â Â Â Â Â
SYSTOOLS is a valid schema name when the current application process
has the SYSADM or SYSCTRL privilege. Â Â
SYSFUN is a valid schema name for external user-defined scalar   Â
functions or external user-defined table functions when the current Â
application process has the SYSADM or SYSCTRL privilege. ( dieser Punkt ist in Version 9 neu dazugekommen ) Â Â Â Â Â Â Â Â Â Â Â Â Â Â
1. April 2009 um 14:31 Uhr #4416
AnonymInaktivHi Experten,
meine UDF läuft unter QMF … zumindest ein bisschen 🙁
Jetzt habe ich folgendes Phänomen:
ich setze unter QMF eine Katalog-Query ab; Ergebnis kommt und ich kann auch mit PF8 bis ans Ende der Ergebnisliste blättern.
Setze ich die Query mit einem ORDER BY ab, bekomme ich einen SQL-Code aus der UDF. (Fehler ist nachvollziehbar und an sich auch behoben, AAAABER ….)warum bekomme ich den Fehler nur mit ORDER BY?
Jetzt wollte ich das Verhalten mal mit dem DSNTEP2 nachstellen, da bekomme ich die Funktion aber nicht ans laufen… Ich habe die Load-Lib in der STEPLIB und das Package unter DSNTEP2 gebunden.
Was fehlt? Was ist falsch?Danke …
Alexander
2. April 2009 um 9:17 Uhr #4475
AnonymInaktivDie Informationen sind leider noch etwas mager.
Du hast CREATE FUNCTION … gemacht.
Was denn für eine ? skalar, table, sourced …
WLM oder SPAS ?
Was macht die Funktion ?Was bedeutet, Du bekommt die Funktion unter DSNTEP2 nicht zum Laufen ?
Bricht sie ab, wird sie gar nicht erst gefunden … ?
Welche Fehlermeldungen kommen ?
Welcher SQLCODE in Verbindung mit ORDER BY …Je mehr Infos Du uns geben kannst, desto effektiver können wir Dir helfen
2. April 2009 um 12:40 Uhr #4504
AnonymInaktivHallo Ulrich,
es ist eine (eigentlich 2) external skalar , die unter/in einem WLM läuft. Die F bekommen einen bis zu 20 Stellen langen String übergeben. Die eine rechnet den nur in einen Dec-Wert um (Rückgabe allerdings X(20), die andere ruft "die eine" auf und macht aus dem Dec-Wert einen Timestamp (Rückgabe X(26)).
Der Fehler war, dass ich blind auf die berechneten Stunden des TS noch die Timezone addiert habe, was natürlich zu einem -181 führt, wenn es plötzlich 25Uhr irgendwas ist. Aber der Fehler ist nicht mein Problem…
Problem #1 ist eben, dass QMF den Fehler nicht bringt, wenn ich in der Ergebnismenge mit PF8 bis ans Ende blätter. Mit einem OrderBy bekomme ich den Fehler -181 aus der Funktion hochgegeben.
Problem #2 ist, dass ich bei einem Aufruf der Funktion (z.B. Sel X2TS(‚FFFF‘) From sysdummy) einen Fehler bekomme:
CEE3250C The system or user abend S013 Â R=00000018 was issued. Â Â Â Â Â Â Â Â
From compile unit DSNTEP2 at entry point READRTN compile unit offset +00002DC2 at entry offset +000002A2 at address 0F354EDA.Die Funktionen beinhalten DB2, haben also entsprechende Packages (in Q.* für QMF und DSNTEP2.* für DSNTEP2). Die Loads liegen in einer Lib, die vom WLM gezogen werden kann. Für den TEP2 hab ich diese als zusätzliche Steplib eingebunden.
Danke für die Mühe
Alexander
3. April 2009 um 7:13 Uhr #4526
AnonymInaktivzu Problem #1:
Hast Du im QMF eine Beschränkung auf Anzeige/Ausgabe maximale Zeilen ? QMF4WINDOWS hat irgendso eine MAXROWS-Angabe. Dann könnte es sein, dass die betroffenen Zeilen gar nicht in der Ausgabe auftauchen, selbst wenn Du mit PF8 ans Ende blätterst.zu Problem #2:
Bei einem S013-18 Abbruch sollte das System Dir im Jobprotokoll ( JESMSGLG ) eine IEC141I Meldung ausgeben, in der eine Bibliothek und ein Member steht. Ist der Membername der externe Name der SP ? Welche Bibliothek wird durchsucht ?3. April 2009 um 11:02 Uhr #4539
AnonymInaktivfangen wir mit Problem #2 an:
Problem #2*überdengrundausschweig*zu #1 …
ist QMF auf dem Grossrechner. Mir ist jetzt noch folgendes aufgefallen:
Query unter QMF mit OrderBy… es kommt die Meldung "QUERY MESSAGES: External function X2TS has returned an error." Mit PF1 bekomme ich die Zusatzinformationen (SQLSTATE und das, was ich mir für genau diesen Fall in UDF-DIAG-TEXT zusammengestringed habe. Alles Prima …Query unter QMF ohne OrderBy… Wenn du da im Report mit PF8 blätterst, bekommst Du doch jedesmal unten die Meldung " OK, FORWARD performed. Please proceed.". Die kommt 9mal beim 10ten mal kommt nix und beim 11ten mal "OK, FORWARD performed. Please proceed." und dann "You are at the boundary of the panel."
Wenn ich nach diesem 10ten mal PF1 drücke, bekomme ich die Zusatzinformationen zu dem Abbruch in der Function. Allerdings (merkwürdigerweise) nur den SQLSTATE und das allgemeine Geschwätz 😉 vom QMF. Im UDF-DIAG-TEXT steht aber jetzt nur der Name der Funktion … Ich habe das nicht dareinprogrammiert  😕 !!Zum Vergleich die Query im DSNTEP2 mal mit und mal ohne Order By; mit kommt keine Ergebniszeile und saubere Fehlermeldung mit meinem SQLSTATE und meinem UDF-DIAG-TEXT. Ohne OrderBy kommen 159 Datensätze. Nach 150 Zeilen kommt eine saubere Fehlermeldung mit meinem SQLSTATE und meinem UDF-DIAG-TEXT. Also auch Prima. Dann kommen noch weitere 9 Sätze …
Fazit: Offensichtlich hat QMF ein Problem mit dem Errorhandling, wenn irgendwann beim Nachlesen ein Fehler auftritt. Kennt das Verhalten jemand?
Danke (auch für den IEC141I-Zaunpfahl@Ulrich) & Grüsse
Alexander
-
AuthorPosts
You must be logged in to reply to this topic.