[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Oct 2016
    Beiträge
    24

    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?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.262
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.879
    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?
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.262
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    ... 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...
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.262
    SUBF-Deckel? Was ist denn da nun wieder mit gemeint...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    ... kennst Du etwa nicht DCL-SUBF , da fehlt Dir sicher noch das brandneue TR76
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.262
    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?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.288
    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;
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Nov 2003
    Beiträge
    2.310
    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;

  11. #11
    Registriert seit
    Oct 2016
    Beiträge
    24
    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

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.310
    Vielleicht liegt's an den Sonderwerten? Welchen Wert besitzt CONST(*HIVAL)?

Similar Threads

  1. MSG aus embedded SQL
    By malzusrex in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 02-06-15, 11:26
  2. embedded sql substring
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 29-06-14, 15:12
  3. SAVLIB und COMMIT-Definitionen
    By Bodo Roggenkamp in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 10-03-03, 09:54
  4. EMBEDDED SQL in RPG
    By Ludger Muhmann in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-07-02, 09:49
  5. Embedded SQL
    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
  •