In RPGLE, the keyword EXTMBR
(short for External Member) is used in the DCL-F
(or fixed-form F-spec) to specify which member of a database file you want to access.
By default, RPG accesses the first member of a file unless you tell it otherwise — that’s where EXTMBR
comes in.
๐ Use Case
When you have a multi-member physical file, and you want to access a specific member at runtime or compile time.
โ Syntax (Free-form RPGLE)
Dcl-F MyFile Usage(*Input) ExtFile('MYPF') ExtMbr('MYMBR');
-
MYPF
= physical file -
MYMBR
= member name
โ Syntax (Fixed-form RPG)
FMYFILE IF E K Disk EXTMBR('MYMBR')
๐ Example: Read from Specific File Member
Let’s say your file INVOICES
has multiple members (2023
, 2024
, 2025
).
Free-form RPGLE Example:
Dcl-F Invoices Usage(*Input) ExtMbr('2024');
Dcl-S InvoiceID Char(10);
Read Invoices;
Dow Not %EOF(Invoices);
Dsply InvoiceID;
Read Invoices;
EndDo;
*INLR = *On;
Return;
๐ง Tips:
-
EXTMBR('MBRNAME'): Hardcoded member name
-
EXTMBR(*ALL): Not valid — RPG only reads one member at a time
-
To dynamically choose a member, use OVRDBF in a CL program:
OVRDBF FILE(INVOICES) TOFILE(INVOICES) MBR(2024)
Then call your RPG program.
Great — let’s talk about EXTFILE
in RPGLE, which works hand-in-hand with EXTMBR
.
๐ What is EXTFILE
?
EXTFILE
tells the RPG program to use a different external file name than the one used in the DCL-F
statement. It allows your RPG variable (file name) to be logically different from the physical or external file name on disk.
This is especially useful when:
-
You want to reuse code with different physical files
-
You want to override the actual file at runtime using OVRDBF
โ Syntax (Free-Form)
Dcl-F MyFile Usage(*Input) ExtFile('ACTUALFILE') ExtMbr('MYMBR');
-
MyFile
: The RPG internal file name used in your code -
ACTUALFILE
: The actual physical file name on disk -
ExtMbr('MYMBR')
: Optional — specifies a specific member
๐ Example
Suppose you have two physical files:
-
CUSTOMERS_2023
-
CUSTOMERS_2024
You can write one RPG program like this:
Dcl-F CustFile Usage(*Input) ExtFile('CUSTOMERS_2023');
Then override the file dynamically in CL:
OVRDBF FILE(CUSTFILE) TOFILE(CUSTOMERS_2024)
CALL PGM(MYPGM)
๐ก Notes
Keyword | Purpose |
---|---|
EXTFILE() |
Maps internal RPG file name to actual file |
EXTMBR() |
Selects specific member within that file |
๐งพ Full Example (Free-Form RPGLE)
**FREE
Dcl-F CustFile Usage(*Input) ExtFile('CUSTOMERS') ExtMbr('PARIS');
Dcl-S CustID Char(10);
Read CustFile;
Dow Not %EOF(CustFile);
Dsply CustID;
Read CustFile;
EndDo;
*INLR = *On;
Return;
This lets you:
-
Write RPG using
CustFile
-
But actually read from
CUSTOMERS
, memberPARIS