PDA

View Full Version : SQL 0518 bei rekursivem Aufruf



M. Matthes
20-03-20, 07:32
<meta content="text/html; charset=UTF-8" http-equiv="content-type"><style type="text/css">@import url('https://themes.googleusercontent.com/fonts/css?kit=fpjTOVmNbO4Lz34iLyptLROjXfSpIU_1TsQlCJ7q4W kfnUSgpG7o6Yx3LgtCQhIzcgkv6_KOpC-vO9QMy-VQCA');ol{margin:0;padding:0}table td,table th{padding:0}.c1{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:12pt;font-family:"Consolas";font-style:normal}.c18{padding-top:12pt;padding-bottom:12pt;line-height:1.1500000000000001;orphans:2;widows:2;text-align:left}.c17{padding-top:0pt;padding-bottom:10pt;line-height:1.1500000000000001;orphans:2;widows:2;text-align:left}.c2{padding-top:0pt;padding-bottom:0pt;line-height:1.0;orphans:2;widows:2;text-align:left}.c0{font-size:10pt;font-family:"Consolas";color:#800080;font-weight:400}.c16{color:#000000;font-weight:400;font-size:11pt;font-family:"Calibri"}.c3{font-size:10pt;font-family:"Consolas";color:#808000;font-weight:400}.c14{color:#000000;font-weight:700;font-size:12pt;font-family:"Consolas"}.c4{font-size:10pt;font-family:"Consolas";font-weight:400}.c19{font-size:12pt;font-family:"Consolas";font-weight:400}.c13{background-color:#ffffff;max-width:467.7pt;padding:70.9pt 56.7pt 70.9pt 70.9pt}.c12{text-decoration:none;vertical-align:baseline;font-style:normal}.c11{color:#ff0000}.c6{color:#0000ff} .c5{color:#800000}.c10{color:#008080}.c8{color:#00 8000}.c9{height:11pt}.c7{color:#000080}.c15{color: #804000}.title{padding-top:24pt;color:#000000;font-weight:700;font-size:36pt;padding-bottom:6pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:18pt;color:#666666;font-size:24pt;padding-bottom:4pt;font-family:"Georgia";line-height:1.1500000000000001;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Calibri"}p{margin:0;color:#000000;font-size:11pt;font-family:"Calibri"}h1{padding-top:24pt;color:#000000;font-weight:700;font-size:24pt;padding-bottom:6pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-weight:700;font-size:18pt;padding-bottom:4pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:14pt;color:#000000;font-weight:700;font-size:14pt;padding-bottom:4pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:12pt;color:#000000;font-weight:700;font-size:12pt;padding-bottom:2pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:11pt;color:#000000;font-weight:700;font-size:11pt;padding-bottom:2pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:10pt;color:#000000;font-weight:700;font-size:10pt;padding-bottom:2pt;font-family:"Calibri";line-height:1.1500000000000001;page-break-after:avoid;orphans:2;widows:2;text-align:left}</style>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