PDA

View Full Version : Verhindern von Meldungen im Joblog



dschroeder
03-02-12, 13:36
Hallo,

ich möchte in einem SQLRPGLE-Programm einen SQL-Alias in der QTEMP erzeugen, um auf eine Sourcedatei zuzugreifen. Vor dem Erzeugen des Alias möchte ich prüfen, ob es den Alias bereits gibt. Dazu versuche ich einfach, auf den Alias zuzugreifen. Wenn das schiefgeht (SQLCOD -204) , ist der Alias nicht vorhanden. Ich habe folgenden Code verwendet:

anw = 'select count(*) from ' + alias;
exec sql prepare cmd from :anw;
if sqlcod = -204;
return *off;
else;
return *on;
endif;

Funktional ist alles OK. Es ist aber sehr unschön, dass bei jedem Fehlversuch eine Diagnosenachricht im Joblog landet. Kann man das irgenwie verhindern bzw kann man diese Nachricht wieder entfernen?

Nachrichten-ID . . . . : SQL0204 Nachricht . . . : UM_MBRARR_EDBVSPGM_QRPGLESRC_BVS9##39 der Art *FILE in QTEMP nicht gefunden.


Vielen Dank im Voraus,
Dieter

B.Hauser
03-02-12, 13:43
Hallo,

ich möchte in einem SQLRPGLE-Programm einen SQL-Alias in der QTEMP erzeugen, um auf eine Sourcedatei zuzugreifen. Vor dem Erzeugen des Alias möchte ich prüfen, ob es den Alias bereits gibt. Dazu versuche ich einfach, auf den Alias zuzugreifen. Wenn das schiefgeht (SQLCOD -204) , ist der Alias nicht vorhanden. Ich habe folgenden Code verwendet:

anw = 'select count(*) from ' + alias;
exec sql prepare cmd from :anw;
if sqlcod = -204;
return *off;
else;
return *on;
endif;

Funktional ist alles OK. Es ist aber sehr unschön, dass bei jedem Fehlversuch eine Diagnosenachricht im Joblog landet. Kann man das irgenwie verhindern bzw kann man diese Nachricht wieder entfernen?

Nachrichten-ID . . . . : SQL0204 Nachricht . . . : UM_MBRARR_EDBVSPGM_QRPGLESRC_BVS9##39 der Art *FILE in QTEMP nicht gefunden.


Vielen Dank im Voraus,
Dieter

Könnte es sein, dass Du STRDBG in der Sitzung in der Du gerade testest aktiv hast?
Wenn ja mach' ihn aus und schon sind die Meldungen weg!

Birgitta

dschroeder
03-02-12, 13:58
Nein, STRDBG ist aus.
Die Meldung kommt immer. Ich habe schon überlegt, ob es eine andere Möglichkeit gibt, zu prüfen, ob der Alias existiert. Der erzeugte Alias wird in der QTEMP als Objekt vom Typ DDMF angelegt. Der Objektname ist aber natürlich ein 10-stelliger generierter Name und für mich unauffindbar.

Ich hatte die Tage bereits ein ähnliches Problem. Da hatte ich mit CHKOBJ ermittelt, ob ein Objekt existiert. Dabei kam es auch immer zu Meldungen im Joblog (Objekt ... in Bib ... nicht gefunden). Das konnte ich beseitigen, indem ich im SQL nach der entsprechenden MONMSG-Abfrage ein RCVMSG MSGTYPE(*EXCP) abgesetzt habe.

Möglicherweise geht so etwas ähnliches ja auch bei (dynamischem) embedded SQL.

Dieter

Pikachu
03-02-12, 14:12
Probier mal mit: RCVMSG MSGTYPE(*LAST) RMV(*YES)

dschroeder
03-02-12, 14:16
Es handelt sich ja um ein RPG-Programm, nicht um ein CL. Das heißt, ich muss den RCVMSG per QCMDEXC ausführen. Das geht aber nicht:
"Befehl RCVMSG in dieser Umgebung unzulässig."

Dieter

B.Hauser
03-02-12, 14:43
Schau Dir mal das API QDBRTVSN (Retrieve Short Name (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=%2Fapis%2Fqdbrtvsn.htm)) an.

Damit kannst Du den kurzen Namen eines Datenbanken-Objekts ermitteln. Sofern das Objekt existiert, bekommst Du den kurzen Namen anderenfalls sollte ein Fehler ausgegeben werden.

... ansonsten solltest Du mal das Log-Level prüfen.

Birgitta

dschroeder
03-02-12, 15:28
Vielen Dank,

das API werde ich mir mal anschauen.

andreaspr@aon.at
03-02-12, 16:28
SQL Fehler werden immer ins JOBLOG geschrieben.
In den Systemtabellen (z.B. QSYS2/SYSTABLES) kannst du schauen ob es den Alias gibt.
Allerdings geht das nicht, wenn der Alias in der QTEMP steht.

Ab i 7.1 kannst du auch ein CREATE OR REPLACE ALIAS machen.
Dadurch gibts zwar keinen Joblog Eintrag mehr, allerdings wird der Alias jedes mal neu erstellt.