PDA

View Full Version : Problem SQL Procedure



Seiten : [1] 2

CaddyMajor
23-06-14, 15:57
Hallo zusammen,

ich habe möchte folgende SQL Procedure erstellen:


CREATE PROCEDURE HERMOSPM.I_POS_CTY ( )
LANGUAGE SQL
SPECIFIC HERMOSPM.I_POS_CTY
NOT DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *NONE ,
DBGVIEW = *SOURCE ,
CLOSQLCSR = *ENDMOD ,
DECRESULT = (31, 31, 00) ,
DFTRDBCOL = *NONE ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
BEGIN

-- Inhalt löschen
DELETE FROM HERMOSPM . POS_CTY ;

-- Und wieder füllen
INSERT INTO HERMOSPM . POS_CTY
SELECT
ROW_NUMBER ( ) OVER ( ) ,
TRIM ( HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) ) CONCAT '_' CONCAT TRIM ( PKATPK ) CONCAT '_' CONCAT TRIM ( PONRPK ) ,
1 , CURRENT_DATE , 1 , HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) ,
' ' ,
CASE WHEN GRMAPK = 'J' THEN 1 ELSE 0 END ,
TRIM ( PONRPK ) ,
HERMOSPM . GETBACK_ID ( 'LANG' , LG ) ,
CASE WHEN UMFCDPK <> ' ' THEN TRIM ( UMFCDPK ) ELSE CAST ( NULL AS VARCHAR ( 400 ) ) END ,
CASE WHEN MSEIPK <> ' ' THEN TRIM ( MSEIPK ) ELSE CAST ( NULL AS VARCHAR ( 8 ) ) END
FROM HERMOSPM . MAPKATUNI
WHERE LG = 'DEU'
AND COALESCE ( HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) , 9999999999 ) <> 9999999999 ;

END ;


Unabhängig vom Sinn des Ganzen:

Wenn ich den Select bzw. den Insert mit dem Select manuell aufrufe, läuft das durch ohne Probleme.
Beim Erstellen der Procedure passiert nichts bist auf eine Art Endlosschleife.

Ich wandel das um (im iSeries Navigator, "Eine SQL-Prozedure :) ausführen") und wenn ich auf der Maschine den Job anschaue, läuft der ewig ohne Ergebnis. Auch keine Fehlermeldung, Joblogmeldung, nichts. Nur ne Art Endlosschleife.

Hat jemand schon sowas mal gehabt? (Wir haben noch V6R1 installiert).

Danke für nen Tip...

Caddy

Fuerchau
23-06-14, 16:05
Ich bin mir nicht sicher, aber mach mal einen "return;" vor dem "end;".
Ist die Zieltabelle denn gefüllt?

CaddyMajor
23-06-14, 16:07
Die Zieltabelle ist gefüllt.
Das mit dem return glaub ich nicht, weil es keinen Rückgabewert gibt.

Er macht ja gerade beim kompilieren (sagt man das bei SQL?) das Problem.
Habe den Umwandlungsjob nun nach 15 Minuten abgebrochen. Keine Meldung nichts.

Die letzten 20 Procudures klappten ohne Probleme... Suspekt.

CaddyMajor
23-06-14, 16:11
Beim Interaktiven Aufruf läuft der Spaß...


> INSERT INTO HERMOSPM . POS_CTY SELECT ROW_NUMBER ( ) OVER ( ) , TRIM ( HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) ) CONCAT '_' CONCAT TRIM ( PKATPK ) CONCAT '_' CONCAT TRIM ( PONRPK ) , 1 , CURRENT_DATE , 1 , HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) , ' ' , CASE WHEN GRMAPK = 'J' THEN 1 ELSE 0 END , TRIM ( PONRPK ) , HERMOSPM . GETBACK_ID ( 'LANG' , LG ) , CASE WHEN UMFCDPK <> ' ' THEN TRIM ( UMFCDPK ) ELSE CAST ( NULL AS VARCHAR ( 400 ) ) END , CASE WHEN MSEIPK <> ' ' THEN TRIM ( MSEIPK ) ELSE CAST ( NULL AS VARCHAR ( 8 ) ) END FROM HERMOSPM . MAPKATUNI WHERE LG = 'DEU' AND COALESCE ( HERMOSPM . GETBACK_ID ( 'ART ' , AARTPK ) , 9999999999 ) <> 9999999999

Anweisung wurde erfolgreich ausgeführt (23660 ms = 23.660 Sek)

33357 Zeilen durch diese Anweisung betroffen

woodstock99
23-06-14, 16:30
blöde frage . was macht er denn wenn du sie mal direkt per strsql eingibst ?

Fuerchau
23-06-14, 16:37
Ggf. stirbt der Compiler wenn die Bibliotheksliste nicht stimmt.
Immerhin verwendest du UDF's, die gefunden werden müssen.

Versuche mal die UDF's qualifiziert "LIB.UDFNAME" anzugeben.

woodstock99
23-06-14, 16:48
braucht man den strichpunkt nach dem end ?

B.Hauser
23-06-14, 17:18
Das Problem liegt also beim CREATE PROCEDURE Statement und NICHT beim CALL?

Wenn der CREATE PROCEDURE so lange braucht liegt vermultich ein Bug vor bzw. fehlen PTF. Bei CREATE PROCEDURE wird lediglich eine C-Quelle mit embedded SQL erstellt und diese umgewandelt, d.h. das dürfte keine 15 Minuten dauern (egal wie groß die Tabelle ist).

Ich habe gerade das CREATE PROCEDURE Statement auf unserer Maschine ausgeführt, Objet war innerhalb von 5 Sekunden erstellt.

Was sagt denn das Joblog?
Wenn Du unter STRSQL arbeitest, vor STRSQL einfach mal STRDBG (ohne Parameter ausführen) und anschließend das Joblog prüfen. Dann sollten nämlich die SQL-Nachrichten protokolliert werden.

Birgitta

CaddyMajor
23-06-14, 17:53
Danke für den Tipp, ich teste das morgen früh gleich mal.
Arbeite zwar nicht mit unter STRSQL (Hatte da so ne Lehrerin :-)), aber ausnahmsweise wird's mal gemacht :-)

B.Hauser
24-06-14, 08:58
Wenn Du mit IBM i Navigator arbeitest, kannst du die STRSQL Optionen auf über Options (Include Debug Messages in Job Log) aktivieren ;)
also kein Green-Screen erforderlich

Birgitta