-
embedded SQL in RPG und dcl-c Definitionen
Servus
kann ich in embedded SQL keine per dcl-c definierten Werte in einer Where Bedingung abfragen?
Bsp:
Code:
dcl-c STATUS 'L';
exec sql
select * from xy.abc
where kundenstatus = :STATUS;
Mir wird dann beim Umwandeln immer gesagt das STATUS nicht definiert sei und läuft deswegen auf Fehler. Sobald ich die dcl-c in dcl-s umändere passt es dann aber....
Habe ich bei mir irgendein Fehler oder ist das in der Tat so vorgesehen?
-
Dein dcl-c impliziert einen Typ, der anscheinend vom SQL-Compiler nicht erkannt wird.
Schau mal, ob du dem dcl-c auch den Typ unterjubeln kannst, was du ja beim dcl-s machen musst.
-
Konstanten konnten noch nie von embedded SQL genutzt werden, unabhängig davon ob sie mit fixen oder free-format D-Bestimmungen definiert wurden.
In SQL PSM (Persistent Module - Programmier-Sprache SQL) können Konstanten erst seit einem der letzten Technologie Refreshs definiert und verwendet werden.
Warum eigentlich eine Konstatne verwenden, wenn man diese im statischen SQL stattdessen direkt angeben kann?
-
Weil man Konstanten dieser Art häufig mehrfach braucht, ggf. in Copy-Strecken verwendet und bei Änderungen dies nur an einer Stelle tun muss?
Gegenfrage:
Warum macht man denn Copystrecken?
Man kann den Code doch auch genau an der Stelle eintragen, wo man ihn braucht!
Im Ernst: Einer meiner Kunden macht dies tatsächlich so, weil ihm die Gefahr einer falsch geänderten Copystrecke ungleich größer erscheint, als bei Änderung der Funktion dies zig mal wiederholen zu müssen. Wobei, wenn die Funktion einmal korrekt steht bedarf sie ja auch keiner Änderung mehr.
-
... dieser ganze Deckel Kram ist wieder mal so eine meta solution (zu deutsch: Zwischenlösung) und der C-Deckel nimmt halt alle geerbten Schwächen mit: man kann da nix typisieren, eine Variable ist da die bessere Wahl (was auch gleich die Frage beantwortet, warum man da kein Literal hinschreiben soll!).
D*B
PS: Der SUBF-Deckel hat die /free-Kantinenwette in Toronto abgelöst, was man so einem RPG Programmierer alles als Verbesserung verkaufen kann - die lachen sich krumm und schief...
-
SUBF-Deckel? Was ist denn da nun wieder mit gemeint...
-
... kennst Du etwa nicht DCL-SUBF , da fehlt Dir sicher noch das brandneue TR76
-
Also DCL kenne ich nur bei CLP.
Interessanter wäre da eher mal die Integration der CMD-Schnittstelle:
DCL-CMD MyOvr OVRPRTF FILE(&NAME) ....;
:
EXEC CMD MyOvr(: Name);
Die Verarbeitung von RTV-CMD's wäre da dann viel effektiver, da ich mir den CLP-Kram dann sparen kann. Ggf. im V8R1-TR83?
-
der DCL-SUBF ist eine der wichtigsten Deklarationsarten und wird gebraucht, damit man in einer Datenstruktur, auch im Freeformat, Felder deklarieren kann, die man dann nur im fixed Format verwenden kann.
Ich habe da mal ein Beispiel aus einer offiziösen Doku:
Example 13. Data structure with the DCL-SUBF keyword
DCL-DS record_one;
buffer CHAR(25);
DCL-SUBF read INT(3);
END-DS;
-
Quelle: Free-form RPG support on IBM i
Data structure subfields start with the DCL-SUBF keyword, but the keyword is optional unless the name is the same as a free-form operation code (op code). Example 13 illustrates a subfield declaration where the DCL-SUBF keyword is required. The DCL-SUBF keyword must be used because read is an op code supported in free-form.
Example 13. Data structure with the DCL-SUBF keyword
DCL-DS record_one;
buffer CHAR(25);
DCL-SUBF read INT(3);
END-DS;
-
Mhm ok dann hilft wohl nur ein dcl-s,löst zwar das Problem, aber elegant und logisch finde ich das ganze nicht. Ist doch dämlich in RPG kann man konstante Werte nutzen aber im embedded SQL nicht...
Wie Fuerchau bereits richtig erkannt hat war das genau dafür gedacht den Status bei Bedarf nur an einer Stelle ändern zu müssen, falls sich da mal was ändert. Klar kann ich auch einfach ein status = 'L' schreiben, aber das ist doch an der Thematik modulare und wartungsfreundliche Programmierung vorbeigedacht.
Aber danke für die Bestätigung, so muss ich nicht weiter rumprobieren, ob es nicht doch mit dcl-c klappt.
Allen ein schönes Wochenende.
"Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard
-
Vielleicht liegt's an den Sonderwerten? Welchen Wert besitzt CONST(*HIVAL)?
Similar Threads
-
By malzusrex in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 02-06-15, 11:26
-
By tarkusch in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 29-06-14, 15:12
-
By Bodo Roggenkamp in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 10-03-03, 09:54
-
By Ludger Muhmann in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 30-07-02, 09:49
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 12-10-01, 09:47
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