-
SQL 0518 bei rekursivem Aufruf
Guten Morgen,
nachdem ich > 10 Jahre stiller Beobachter in diesem Forum war,
versuche ich es heute mit meinem ersten Forumsbeitrag.
Konkret geht es um ein ein SQL-Statement, welches funktioniert,
wenn die Zieltabelle zum Umwandlungszeitpunkt des Programmes nicht vorhanden ist.
Sobald die Tabelle beim Umwandeln vorhanden ist entsteht beim "select from final table..." der SQL - Fehler SQL0518 .
Das Problem tritt auf, sobald sich das erste mal Programm rekursiv aufruft.
Den Code ist ausführbar und liese sich auf eurer Maschine testen.
Das ganze tritt auch mit einer SQL-beschriebenene Tabelle auf.
Tabelle qgpl/ddsid vor dem Aufruf bestehen lassen -> SQL0518
Tabelle qgpl/ddsid vor dem Aufruf löschen -> 1. Aufruf funktioniert, 2. Aufruf SQL0518
Tabelle löschen und BHMXXX umwandeln -> alle Aufrufe funktionieren.
Vielen Dank im Voraus für eure Mithilfe.
Anbei der Code:
ctl-opt DATEDIT(*DMY.) DECEDIT('0,') DEBUG(*YES) ACTGRP(*new)
OPTION(*SRCSTMT : *NODEBUGIO : *NOUNREF);
//------------------------------------------------------------------
// Definitionen
//------------------------------------------------------------------
dcl-pr bhmxxx extpgm('BHMXXX');
*n like($ddsid) options(*nopass);
end-pr;
dcl-s $ddsid zoned(15:0);
dcl-s CmdText char(30000);
dcl-pr QCmdExc extpgm('QCMDEXC');
*n char(200) options(*varsize) const;
*n packed(15:5) const;
end-pr;
//-----------------------------------------------------------------
// Main
//-----------------------------------------------------------------
exec sql set option closqlcsr = *endactgrp;
exec sql set option commit = *none;
// erster Aufruf ohne Parameter -> Tabelle erstellen oder leeren
if %parms = 0;
// wenn die Tabelle vorher gelöscht wird oder
// die Tabelle beim umwandeln nicht vorhanden ist
// funktioniert der Select from final table auch rekursiv
// exec sql drop table qgpl/ddsid;
CmdText = 'CRTPF FILE(qgpl/ddsID) RCDLEN(15)';
Monitor;
QCmdExc(CmdText:%Size(CmdText));
On-Error *all;
endmon;
exec sql delete from qgpl/ddsid;
exec sql insert into qgpl/ddsid values(1);
endif;
// insert qgpl
// select from final table
// -> fehler bei RecursiveCall "bhmxxx"
// --> und tabelle zum umwandlungszeitpunkt vorhanden war
exec sql
select ddsid into :$ddsid from final table
(insert into qgpl/ddsid
values(select max(int(ddsid))+1 from qgpl/ddsid));
// rekursive Aufruf BHMXXX
if sqlcode = 0 and $ddsid < 100;
bhmxxx($ddsid);
endif;
*inlr = *on;
return;
http://www.michaelmatthes.de
Similar Threads
-
By JotSo in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 17-09-19, 14:18
-
By Dschainers in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 28-08-19, 11:09
-
By rr2001 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 27-05-14, 13:44
-
By it-wolf in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 19-07-02, 16:27
-
By hs in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 09-10-01, 12:06
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks