View Full Version : Total Free und SQL --> Eine schlechte Lösung?
Hallo zusammen,
wenn ich in einem SQLRPGLE eine DCL-DS definiere um diese für eine SELECT INTO zu nutzen, dann sagt der SQL-Precompiler, das er die Zielvariable (Also die DS) nicht kennt.
Wenn ich die DS mit einer normalen D bzw. I Karte definiere, dann geht es...
Kann es sein, das IBM eben nicht alles mitgezogen hat?
Danke an alle Helfenden.
... das wäre ja nicht ungewöhnlich, wenn der SQL Precompiler backlevel ist (ich erinnere mich nur, wie lange es gedauert hat, bis der qualified DS und lokale Variablen konnte...)
D*B
Vielleicht fehlen euch nur ein paar PTFs (https://ibm.biz/rpgcafe_fullyfree_rpg)?
dschroeder
12-07-16, 13:41
Bei uns geht das (bisher) auch nicht. Wir haben und damit abgefunden, Hostvariablen einzeln zu deklarieren und nicht direkt die Felder aus der Datenstruktur zu verwenden.
Wir sind auf 7.1 TR 11
Dieter
... wobei man dieses Problem (bei adäquater Vorgehensweise) nicht hat.
Datenbanklogik gehört (eigentlich) ins View-Layer ( create view as select...) und dann hat man im Programm nur noch select * from myView order by ,,, und die DS für den fetch wird dann als E DS deklariert - und falls das mit real totally free nicht geht, dann ist das eh Murks (Krampf ist das eh...)
D*B
dschroeder
12-07-16, 14:18
Es geht hierbei ja nicht immer um Datenstrukturen, die den Datensatz abbilden. Ich meine Datenstrukturen, die ich im Programm deklariere, um z.B. brutto, netto und mwst abzubilden:
dcl-ds summeDS qualified:
brutto packed(15:2);
netto packed(15:2);
mwst packed(15:2);
Da würde ich schon gerne so etwas schreiben wie:
exec sql select sum(xx_brutto) into :summeDS.brutto from tabellexx;
In dieser Konstellation hilft mir eine View nicht weiter, denke ich.
... was hast Du gegen
create view AufttragSumme (oder whatever) as
select sum(xx-brutto) as brutto, sum(...) as netto, sum(...) as mwst
from...
dann wird deine SummeDS zur e ds und du füllst die dann mit select * from AuftragSumme into ...
die dahinter stehende Ideen sind Entkoppelung (verwende niemals < never - ever> eine Table im Programm) und Zentralisierung (select sum(..) ist Datenbanklogik!!!) man gewinnt dadurch die Möglichkeit weitgehende strukturelle Änderungen in der Datenbank vorzunehmen, ohne dass dei Anwendung tangiert ist und QS wird einfacher, da die Prgramme im Datenbankzugriff realtiv stumpf sind.
D*B
andreaspr@aon.at
12-07-16, 14:42
Bei uns (7.2) funktioniert das ganze ohne Probleme.
exec sql select sum(xx_brutto) into :summeDS.brutto from tabellexx;
Ich bilde mir auch ein schon vor früher 6.1 und 7.1 solche Konstrukte schon mal verwendet zu haben.
Ich meine DS oder Teile bzw. Felder einer DS im SQL zu verwenden.
"Leider" kann ich das aber nicht mehr testen da bei uns alles schon auf 7.2 hochgezogen ist.
Bei uns (7.2) funktioniert das ganze ohne Probleme.
exec sql select sum(xx_brutto) into :summeDS.brutto from tabellexx;
Ich bilde mir auch ein schon vor früher 6.1 und 7.1 solche Konstrukte schon mal verwendet zu haben.
Ich meine DS oder Teile bzw. Felder einer DS im SQL zu verwenden.
"Leider" kann ich das aber nicht mehr testen da bei uns alles schon auf 7.2 hochgezogen ist.
... so, so, unter V6R1 free form declarations
viele Grüße aus Alsheim
D*B
andreaspr@aon.at
12-07-16, 14:49
... so, so, unter V6R1 free form declarations
viele Grüße aus Alsheim
D*B
Bezogen auf die ursprüngliche Aussage:
Wenn ich die DS mit einer normalen D bzw. I Karte definiere, dann geht es...
Ja, mit einer DS konnte ich das auch schon früher ...