-
Ja, das mit dem Überladen der Funktion ist ja korrekt, allerdings ist der Weg dann ein anderer für die Aufrufe (synmolische Beschreibung):
MyFunction(P1, P2, P3) <= Hauptfunktion
{ MyILERpg (P1, p2, P3) }
MyFunction(P1, P2) <= Überladen
{ MyFunction(P1, P2, NULL) }
MyFunction(P2) <= Überladen
{ MyFunction(NULL, P2, NULL) }
Alternativ geht es natürlich auch mit verschiedenen Parametertypen:
MyFunc(P1Char, P1Num)
MyFunc(P1Char)
{ MyFunc(P1Char, NULL) }
MyFunc(P1Num)
{ MyFunc(NULL, P1Num) }
D.h.:
Du hast eine Grund-SQL-Funktion/Prozedur mit allen Parametern und Verweis auf dein RPG.
Alle weiteren SQL-Funktionen/Prozeduren gleichen Namens und anderer Signatur rufen die Grundfunktion-SQL-Funktion/Prozedur (Nicht das RPG!) auf und belegen die fehlenden Parameter mit NULL oder auch einem beliebigen anderen Default-Wert.
Der Aufruf des RPG's im SQL-Mode (den man verwenden sollte):
- alle Parameter (P1, P2, ...)
- Returnwert
- NullFlages für alle Parameter
- NullFlag des Returnwertes
- SQL-Variablen (Name, Diagnose, ...)
Wie du siehst, lassen sich dem RPG daher aus SQL keine verschiedenen Parameter unterjubeln.
Du kannst natürlich ein wenig mit Pointern und Rechenlogik spielen:
Per %Parms() bekommst du die Anzahl Parameter.
Davon ziehst du die letzen 3-4 SQL-Parameter ab.
Der Rest muss nun eine Geradzahlige Anzahl sein.
Die 1. Hälfte sind Parameter + Return, die 2. Hälft die NULL-Flags.
Was machst du dann aber per MyFunc(P1Num) und MyFunc(P1Char)?
In ILERPG lässt sich der Feldtyp und die Feldlänge der Übergabe leider nicht abfragen.
Dies ist OOP-Sprachen vorbehalten (durch strenge Typisierung).
Übrigens:
Wenn man sich die Definition eines fertigen Moduls/Programms ansieht, so steht da
Anzahl Parameter 0 - 400!
D.h., zur Laufzeit wird nicht geprüft, wieviele Parameter tatsächlich übergeben werden oder von der Prozedur erwartet werden.
OMIT definiert nur für den Compiler, dass er bei fehlender Kodierung des Parameters automatisch NULL-Pointer übergibt.
D..h., ein Prototyp definiert die Parameter, wobei die letzten Omitted sein können.
Bei einer verkürzten Parameterliste, hängt der Compiler eben NULL-Adressen einfach an.
Ein externer Aufruf aus SQL (dynamischer CALL, CALLPRC) macht das aber nicht.
Similar Threads
-
By _MG_ in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 15-09-17, 15:02
-
By Flappes in forum IBM i Hauptforum
Antworten: 19
Letzter Beitrag: 24-03-17, 13:26
-
By _MG_ in forum NEWSboard Programmierung
Antworten: 14
Letzter Beitrag: 12-12-15, 12:07
-
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