PDA

View Full Version : Jobname im SQL ermittlen



Seiten : [1] 2

pwrdwnsys
22-01-07, 17:39
Hallo liebe Forumsmitglieder,

ich suche eine performante Möglichkeit, im SQL den Jobnamen und Jobnummer zu ermitteln. Ist für einen Trigger erforderlich, welcher diese Daten wegschreiben soll.
Den User kann ich ja mit

SELECT USER FROM SYSIBM.SYSDUMMY1 ermitteln. Finde aber nichts, wie ich den gesamten Job bekomme. Ein separater Programmaufruf ist mir aber zu langsam.

Any idea ?

Fuerchau
22-01-07, 18:29
Dies kannst du nur mit einer externen SQL-Funktion, CLP mit RTVJOBA oder RPG/LE aus der SDS ermitteln.

pwrdwnsys
22-01-07, 18:32
Danke, dann werd ich das wohl so machen müssen.

Fuerchau
22-01-07, 20:30
die Performance ist ggf. auch zu vernachlässigen, da du diese Funktion nicht unbedingt bei jedem Aufruf benötigst.
In einer externen SQL-Funktion/Prozedur kann ich das in einer statischen Variablen speichern.
Bei nativen SQL-Prozeduren wirds da schon schwieriger.

gue_br
30-11-09, 13:50
Dies kannst du nur mit einer externen SQL-Funktion, CLP mit RTVJOBA oder RPG/LE aus der SDS ermitteln.

Hallo!

Ich habe genau das gleiche Problem, schaffe es aber nicht mit der Ext. Function.

Hab mir ein CL gemacht, welches mit Job u. Nr zurückliefert:

PGM PARM(&JOB_JOBNR)
DCL &JOB_JOBNR *CHAR 17
DCL &JOB *CHAR 10
DCL &JOBNR *CHAR 6
RTVJOBA JOB(&JOB) NBR(&JOBNR)
CHGVAR VAR(&JOB_JOBNR) VALUE(&JOB *CAT ' ' *CAT &JOBNR)
ENDPGM

Hab auch schon in der SQL-Referenz über die Erstellung von ext. Functions nachgelesen, aber es funktioniert nicht.

Kann mir bitte jemand helfen?

Danke,
Günter

B.Hauser
30-11-09, 14:26
Was klappt wo nicht?
Ein bisschen mehr Informationen bräuchten wir schon.

Wird die Stored Procedure nicht erstellt?
Wie sieht der CREATE-Befehl für die Stored Procedure aus?
Tritt das Problem beim Aufruf auf?
Wie sind die Variablen im SQL definiert, wie wird die Prozedur aufgerufen?

Birgitta

gue_br
30-11-09, 14:56
Hallo!

Naja, ich möchte gern wissen, wie genau eine ext. Funct. definiert werden muß, die dann den Jobnamen und die Jobnummer liefert.

Ich habe mal obiges CL erstellt, welches das grundsätzlich erledigt.

Wenn ich dann z.B. eine Function so erstelle u. verwende:

create function sqljob ()
RETURNS TABLE (job_jobnr CHAR(17))
EXTERNAL NAME sqljob
LANGUAGE CL
PARAMETER STYLE DB2SQL
NO SQL
DETERMINISTIC
NO EXTERNAL ACTION
CALLED ON NULL INPUT
DISALLOW PARALLEL
Routine SQLJOB wurde erstellt, kann aber nicht gesichert oder zurück
select sqljob() from dual
Verwendung von Funktion SQLJOB ungültig.


Hab aber auch schon andere Varianten probiert (z.B. mit RETURNS CHAR), aber ich will es eigentlich nicht durch Herumprobieren herausfinden, wie die ext. Funct. dann richtig erstellt werden soll.

Die Tabelle DUAL hab ich mir aus meiner Oracle-Zeit mitübernommen. Ist eine Tabelle mit einem Feld und einem Wert. Macht eigentlich das gleiche wie mit SYSDUMMY1.

Danke,
Günter

Fuerchau
30-11-09, 14:58
Ein CLP kann keine TABLE zurückgeben sondern halt nur einen Wert.
Eine TABLE geht nur mittles RPGLE und einer DS.

gue_br
30-11-09, 15:03
Hallo!

Ja, klar, hab das so vom SQL-Referece-Manual übernommen.

Ich will eigentlich nur wissen, wie in einer SQL-Abfrage in einem Trigger der Job ermittelt werden kann. Genau so wie es im ersten Beitrag des Threads gefragt wird.

Danke,
Günter

B.Hauser
30-11-09, 15:26
Heißt das, dass Du einen SQL Trigger hast, in dem Du den aktuellen Job-Namen und die Job-Nr. benutzen willst?

In diesem Fall würde ich anstatt einer Funktion eine Stored Procedure schreiben, die dann über den SQL-Befehl CALL aufgerufen wird.

Eine Funktion zu schreiben ist mit CL etwas komplexer, da CL zum einen selber keine Rückgabe-Werte unterstützt und zum anderen bei Parametertyp DB2SQL ein Wust von zusätzlichen Parametern definiert werden muss.


CREATE PROCEDURE MYSCHEMA/GETJOBQUAL (
OUT POUTJOB CHAR(17))
LANGUAGE CL
SPECIFIC MYSCHEMA/GETJOBQUAL
DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
EXTERNAL NAME 'MYSCHEMA/GETJOBQUAL '
PARAMETER STYLE GENERAL ;

SQL Trigger:

...
Begin
Declare CurrJob Char(17);
Call GetJobQual(CurrJob);
...
End

Birgitta