Hallo,

fragst Du SQLCOD oder SQLSTT nach dem Insert ab?
Wenn nicht solltest Du das auf alle Fälle machen. Anhand des SQLCODEs oder der SQLSTATUS wird angezeigt, ob das vorherige SQL-Statement ordnungsgemäß durchgeführt wurde oder auf Fehler gelaufen ist.
Bei einem negativen SQLCOD oder einem SQLSTT bei dem die ersten beiden Stellen weder '00' noch '01' noch '02' sind liegt ein Fehler vor. Bei SQLCOD 100 oder SQLSTT '02000' wurde kein Satz mit den entsprechenden Kriterien gefunden.

Um das Joblog zu prüfen solltest Du den Debugger anwerfen, dann werden auch die SQL-Aktionen protokolliert und können analysiert werden.

M.E. liegt eine Lock-Situation vor, die verhindert, dass neue Datensätze geschrieben werden.

RCLRSC bringt bei einem ILE-RPG-Programm überhaupt nichts!
Die ODPs (Offene Daten Pfade) können allenfalls über RCLACTGRP geschlossen werden. Wenn das Programm allerdings in der Default-Aktivierungsgruppe läuft, hilft nur Job-Ende, da Default-Aktivierungsgruppen nicht von Hand geschlossen werden können.

In Ausnahmefällen, kann man dafür sorgen, dass die ODPs immer bei Modul-Ende gelöscht werden. Dazu musst Du im Compile-Command die Option CLOSQLCSR auf *ENDMOD setzen. Für die Performance ist dies allerdings nicht besonders vorteilhaft, da bei jedem Aufruf die komplette Optimierung inclusive dem Öffnen der ODPs durchlaufen werden muss. (Es gibt also keine wiederverwendbaren ODPs!)

Anstatt die Option im Compile-Command zu setzen kann auch ein entsprechendes SET OPTION Statement in die Quelle eingefügt werden. Pro Quelle darf (ab Release V5R4) nur ein einziges SET OPTION Statement angegeben werden und dies muss physisch in der Quelle vor allen anderen SQL-Statements angegeben werden.

PHP-Code:
C/Exec SQL   Set Option CLOSQLCSR = *ENDMOD
C
/End-Exec 
Birgitta