آی‌بی‌ام آرپی‌جی

آر پی جی (زبان برنامه‌نویسی مبتنی بر آی بی‌ام)
زبان RPG یک زبان برنامه‌نویس سطح بالا (HLL) برای برنامه‌های کاربردی تجاری است. زبان RPG یک زبان برنامه‌نویسی اختصاصی IBM است و نسخه‌های بعدی ان تنها در IBM یا سیستم‌های مبتنی بر OS/400 موجود هستند.
این زبان تاریخچه طولانی دارد، در سال ۱۹۵۹ توسط ای بی‌ام به صورت Report Program Generator (تولیدکننده برنامه گزارش) – ابزاری برای تکثیر پردازش کارت پانچ شده روی‌ای بی‌ام ۱۴۰۱ – ساخته شد و بعد در اواخر دهه ۱۹۶۰ میلادی به صورت RPG II برای IBM System/3 ارتقاء داده شد و از ان زمان به بعد به صورت یک HLL معادل COBOL و PL/I درآمد.
این زبان به عنوان زبان برنامه‌نویسی رایج در سیستم عامل ای بی‌ام ای باقی مانده‌است، این سیستم عامل در سخت‌افزار IBM Power I Platform اجرا می‌شود. نسخه فعلی، RPG IV (ILE RPG نیز نامیده می‌شود) یک محیط برنامه‌نویسی مدرن را فراهم می‌سازد.
بررسی کلی
برنامه RPG ابتدا با File Specifications (مشخصات فایل) آغاز به کار کرد که همه فایل‌هایی که در ان نوشته می‌شدند، از ان خوانده می‌شدند یا به روزرسانی می‌شدند را فهرست بندی می‌کرد، بعد Date Definition Specifications (مشخصات تعریف داده‌ها) قرار داشت که اجزای برنامه مانند Data Structures (سازه‌های داده‌ها) و ارایه‌های بعد دار را داشت، این بسیار شبیه بخش Working-Storage برنامه COBOL یا بیانیه‌های Var در پاسکال بود. سپس Calculation Specifications (مشخصات محاسبه) قرار داشت که حاوی دستورالعمل‌های قابل اجرا بود. بعد Output Specifications (مشخصات برون داد) می‌تواند وجود داشته باشد که می‌توان از ان برای تعیین طرح کلی سایر فایل‌ها یا گزارشات استفاده کرد. در عوض فایل‌ها، بعضی از سازه‌های داده‌ها و گزارشات را می‌توان در بیرون تعریف کرد که اغلب نیاز به کدگذاری دستی مشخصات درون داد و برون داد (I/O) را برطرف می‌کند.
در روزهای اول RPG، نقطه قوت عمده ان سیکل برنامه بود: هر برنامه RPG در یک حلقه ضمنی اجرا می‌شود که می‌تواند برنامه را برای هر ضبط فایل به کار ببرد. در ان زمان هر ضبط (کارت پانچی انفرادی) با هر خط در برنامه مقایسه می‌شد که براساس ضبط کار می‌کرد نه براساس اینکه ایا خط دارای اندیکاتور روشن یا خاموش است یا خیر – از مجموعه‌ای از متغیرهای منطقی با شماره ۰۱ الی ۹۹ برای اهداف کاربر نهایی، یا سایر مجموعه‌های کوچکتر براساس ضبط، میدان یا عملکردهای پردازش گزارش. مفهوم قطع سطح و تطبیق ضبط‌ها مختص زبان RPG II است و ابتدا با داشتن کارت خوان در ذهن ساخته شد.
از زمان ورود سیستم ۳۸ در ۱۹۷۹ میلادی، اکثر برنامه نویسان RPG به نفع کنترل جریان برنامه با ساختارهای حلقه استاندارد دست از استفاده از سیکل برداشتند با این وجود ای بی‌ام همچنان به تامین سازگاری وارونه برای سیکل ادامه داده است.
تاریخچه
زبان RPG یکی از چند زبانی است که برای ماشین‌های Punched Card ساخته شد که تا امروز همچنان از آن‌ها استفاده می‌شود. علت این است که این زبان به مرور زمان در حد قابل توجهی رشد کرده‌است. این زبان ابتدا در ۱۹۵۹ میلادی توسط ای بی‌ام ساخته شد. نام Report Program Generator (تولیدکننده برنامه گزارش) گویای هدف این زبان است: تولید گزارش از فایل‌های داده‌ها از جمله کارت تطبیق و گزارشات نیمه کلی.
فارگو (FARGO) (عملیات تولید گزارش اتوماتیک چهارده به یک) پیش پردازشگر RPG در ای بی‌ام ۱۴۰۱ بود. هدف از هر دو زبان تسهیل تبدیل جدول نویس ای بی‌ام (tab) و تجهیزات ضبط واحد به رایانه‌ای جدید برای تکنیسین‌ها بود.
تکنیسین‌های ماشین جدول‌بندی به زدن سیم به پانل‌های کنترل برای اجرای درون داد، برون داد، کنترل و عملیات‌های شمارشگر (جمع، تفریق، ضرب و تقسیم) عادت داشتند. برنامه‌های ماشین‌های جدول با ضربه‌های خارج شده در سیکل ماشین اجرا می‌شدند؛ بنابراین، FARGO و RPG از مفهوم سیکل ماشین با سیکل برنامه تقلید کردند. زبان RPG بهتر از FARGO بود و به عنوان برنامه برتر تولید گزارش سریع جایگزین ان شد.
زبان‌های جایگزینی که در ان زمان معمولا رواج داشتند Assembler, COBOL یا FORTRAN بودند. زبان COBOL یک زبان تجارت گرای شبیه زبان طبیعی بود و FORTRAN زبانی بود که برنامه‌های کاربردی ریاضیات را آسان می‌کرد. سایر زبان‌های این دوره شامل ALGOL و Autocoder بودند و چند سال بعد PL/I آمد. اسمبلر و COBOL در عملیات‌های تجاری پردازنده مرکزی رواج بیشتری داشتند (سیستم /۳۶۰ مدل‌های ۳۰ و بالاتر) و RPG به تازگی توسط مشتریانی مورد استفاده قرار می‌گیرد که در حال‌گذار از تجهیزات جدول‌بندی هستند (سیستم / ۳۶۰ مدل ۲۰).
تکامل زبان
زبان RPG II با مجموعه رایانه‌های سیستم / ۳ معرفی شد. بعدا در سیستم / ۳۲، سیستم / ۳۴، و سیستم / ۳۶ با نسخه ارتقاء یافته زبان به کار برده شد؛ و RPG II برای سیستم‌های بزرگتر نیز موجودبود از جمله پردازنده مرکزی سیستم ای بی‌ام / ۳۷۰ که DOS/VSE را اجرا می‌کند (بعد VSE/SP, VSE/ESA و z/VSE). همچنین ICL روی سیستم عامل VME/K خود یک نسخه تولید کرد.
زبان RPG III برای سیستم / ۳۸ و جانشین ان AS/400 ساخته شد. زبان RPG III به‌طور چشمگیری با زبان اولیه فاصله گرفت، سازه‌های ساختاربندی شده مدرن مانند بلوک‌های IF-ENDIF، حلقه‌های DO، و subroutines (RPG2 Supported Subroutines) را فراهم کرد. همچنین RPG III برای سیستم‌های بزرگتر از جمله پردازنده مرکزی سیستم ای بی‌ام / ۳۷۰ که OS/VSI را اجرا می‌کند فراهم شد. این زبان از Unisys برای سیستم عامل VS/9 که در پردازنده‌های مرکزی UNIVAC Series 90 اجرا می‌شوند نیز فراهم شد.
در اوایل دهه ۱۹۸۰ میلادی، DE/RPG یا Date ntry RPG تنها در مجموعه ایستگاه‌های ثبت داده‌های‌ای بی‌ام ۵۲۸۰ موجود بود. این زبان شبیه RPG III بود اما Data Descriptions (DDS) خارجی برای تشریح (فایل‌های) داده‌ها در سیستم / ۳۸ و جانشین‌های آن را نداشت. در عوض بخش DDS باید در خود منبع RPG گنجانده می‌شد.
زبان RPG/400 زبان RPG بود که به‌طور اثربخش در AS/400 اجرا می‌شد. ای بی‌ام نام کامپایلر RPG را به RPG/400 تغییر داد اما در زمان ورودش با کمپایلر RPG III در سیستم / ۳۸ همسان بود. تغییر برند به خاطر ایجاد تمایز بین CISC قبلی (Complex Instruction Set Compiler) در جعبه‌های بژ با RISC سریع بعدی (Reduced Instruction Set Compiler) انجام شد که معمولا در سرورهای سیاه است. همه محصولات ای بی‌ام عملا برند xxx/400 را داشتند و کامپایلر RPG از این امر مستثنی نبود؛ و RPG III با کامپایلر RPG /400 همگردان شد که چیز جدیدی برای زبان RPG III نداشت تا اینکه‌ای بی‌ام پس از چند سال موجود بودن AS/400 شروع با ساخت کدهای عملیاتی جدید کرد مانند SCAN, CAT، و XLATE. این ارتقاءهای RPG III در نسخه RPG III سیستم / ۳۸ موجود نبود.
زبان RPG IV (که RPGLE یا ILE RPG نیز نامیده می‌شود) در ۱۹۹۴ منتشر شد و نام ان رسما دیگر initialim نبود. زبان RPG IV تنوع وسیعی از عبارات را در Extended Factor-2 Calculation Specification (مشخصات محاسبه فاکتور ۲ بسط یافته) و Procedure sytnax (نحو روش) عرضه کرد. زبان RPG IV تنها نسخه RPG بود که RPG در خط بلند پردازشگرهای سیستم AS/400 (iSeries و غیره) از ان پشتیبانی کرد.
RPG IV
در ۲۰۰۱ میلادی با انتشار OS/400 V5R1، RPG IV در مقایسه با Extended Factor-2 Calculation Specification آزادی بیشتری را برای محاسبات فراهم آورد: مدخل منبع دارای متن با فرمت آزاد، یک جایگزین برای فرمت منبع وابسته به ستون اولیه. محاسبه "/Free" نیازی به قرار دادن کد عملیات در یک ستون خاص ندارد؛ کد عملیات برای عملیات‌های EVAL و CALLP اختیاری است؛ و syntax (نحو) به‌طور کلی بسیار شبیه پردازنده مرکزی، زبان‌های برنامه‌های همه منظوره، بود. تا نوامبر ۲۰۱۳، فرمت آزاد تنها برای Calculation Specification اعمال می‌شد. با ارتقاء V7R1 TR7 برای زبان دیگر نیازی به محاسبات "/free" و "/end-free" نبود و زبان در نهایت به گره‌هایی برای کارت‌های پانچ شده تبدیل شد.
امروزه، RPG IV زبان محکم‌تری است. هر چند که می‌توان هنوز هم ویرایش را با SEU انجام داد که ویرایشگر صفحه ساده و سبز (هر چند که بررسی نحو برای مشخصات معرفی شده از OS 7.1 به بعد حمایت نمی‌شود) است اما پیشرفت طولانی ابزار به مرور زمان رخ داده است. بعضی از این‌ها شامل Code/400 و Visual Age برای RPG بوده‌اند که توسط ای بی‌ام ساخته شدند و Jon Paris و دیگران آن‌ها را ارتقاء دادند. به تازگی پلتفرم ویرایش مطلوب، Sebsphere Development Studio client است که اینک RDi (Rational Developer for i) نامیده می‌شود که اجرای سفارشی شده Eclipse است. اکلیپس و همچنین RDo در اصل در رایانه‌های شخصی و در سایر ابزار اجرا می‌شوند. ای بی‌ام مرتب توانایی‌های آن را افزایش می‌دهد و عملکردهای توکار بیشتری (BIF) را اضافه می‌کند. این توانایی وصل شدن به اشیاء جاوا و i5/OS APls را دارد؛ می‌توان از ان برای نوشتن برنامه‌های CGI با کمک جعبه ابزار وب Cqidev2 ای بی‌ام، Cozzi app-Tools (مجموعه‌ای از روتین‌های RPG و CGI برای RPG IV), CGILIB, RPG Toolbox و سایر بسته‌های تجاری Web-enabled استفاده کرد. این حتی با تغییراتش هم سازگاری وارونه بسیار زیادی را دارد بنابراین یک برنامه RPG که ۳۷ سال پیش نوشته شده‌است اینک با کمی تغییر یا بدون تغییر هنوز هم اجرا می‌شود.
پریکامپایلر SQL به سازندگان RPG فعلی این امکان را می‌دهد که از مزیت SQE هزینه محور ای بی‌ام (SQL Query Engine موتور جستجوی اس کیو ال) بهره ببرند. یک سازنده با یک رویکرد F-Spec سنتی باید مسیر دسترسی خاص به مجموعه داده‌ها را مشخص کند اینک آن‌ها می‌توانند جملات SQL جاساز شده‌استاندارد را مستقیما در برنامه اجرا کنند. وقتی پریکامپایلر SQL کامپایل می‌شود جملات SQL جاساز شده نامعتبر را تبدیل به جملات RPG معتبر می‌کند که برنامه‌های مدیر پایگاه داده‌ها که در نهایت درخواست جستجو را اجرا می‌کنند را فرا می‌خوانند.
در ۲۰۰۶ میلادی، نام OS/400 به i5/OS تغییر یافت تا با ابتکار عمل برندگذاری IBM System جدید مطابقت داشته باشد؛ این ۵ بعدا به نفع System i کنار گذاشته شد. در مارس ۲۰۰۸، به عنوان بخشی از ادغام خطوط محصول System i و System p سیستم‌های نیرو، نام i5/ OS به IBM i تغییر یافت. سیستم‌های نیروی جدید نیز شماره‌های نسخه پردازنده مرکزی را اتخاذ می‌کنند، ۶٫۱ را جایگزین نشان‌گذاری V 1R1M0 بیست ساله می‌کنند. جدیدترین نسخه منتشر شده اینک IBM I 7.3 نامیده می‌شود و کاملا زبان RPG IV و همچنین بسیاری دیگر را حمایت می‌کنند. مشتری WebSphere Development Studio (WDS) اینک Rational Developer برای i (RD i) نامیده می‌شود که سه سطح محصول از آن‌ها موجود است. آن‌ها Rational Developer for I (RDi), RDi Service Oriented Architecture (RD I SOA), Rational Application Developer (RAD) نامیده می‌شوند. صف جدید، بسته‌بندی دانه‌ای‌تری از همه ابزار توسعه را فراهم می‌سازد و آنهایی که قبلا با WDSc و WDSc Advanced Edition عرضه شده‌اند را حمایت می‌کنند.
این زبان براساس مجموعه کاراکتر EBCDIC است اما UTF-8، UTF-16 و بسیاری دیگر از مجموعه‌های کاراکتر را نیز حمایت می‌کند. عده‌ای ابعاد رشته ایمن زبان را شخصی و خاص در نظر می‌گیرند زیرا تیم کامپایلر با دادن یک ذخیره ایستا به هر رشته، به ان پرداخته است نه اینکه محیط زمان اجرای RPG را قابل ورود مجدد کند. این برای مبهم کردن تمایز بین رشته و پروسه گفته شده‌است (رشته‌های RPG IV تبدیل به نوعی پیوند بین رشته‌ها و پروسه‌ها می‌شوند).
دسترسی آزاد RPG
در سال ۲۰۱۰ میلادی با نام کامل Rational Open Access: RPG Edition آغاز به کار کرد.
استیو ویل معمار ارشد ای بی‌ام ای هنگام آغاز به کار ان اینطور آن را تشریح کرد: یک ارتقاء که واقعا یک تغییر معماری است که RPG را برای کل کاربردهای جدید می‌گشاید؛ و IBM i، دوستان ما در IBM Rational، و چند ISV که با IBM برای یک دستاورد مهم کار کرده‌اند آن را برای جامعه به ارمغان می‌آورند. ایده پشت این توانمندی جدید رفع نیاز به برون داد از برنامه‌های RPG که به زور وارد جریان محدود داده‌های ۵۲۵۰ می‌شوند است. در عوض، می‌توان آن را به رسیدگی کنندگان داد، آن‌ها می‌توانند آن را به هر نحوی که بخواهند تغییر دهند. آن را در XML بگذار؛ آن را در فرمت مورد نیاز یک ابزار فراگیر قرار ده؛ یک وب پیچ بساز که مانند صفحه ۵۲۵۰ نباشد؛ هر چه می‌خواهید.
هرچند که بسیاری از شرکت‌ها نسبت به مفید بودن Open Access شک داشتند اما Open Access خیلی زود مورد استقبال دیگران قرار گرفت از جمله Profound Logic که با هدف باز کردن i به سرعت آن را وارد محصولات خود کرد و اسکات کلمنت که سازنده محصول بود و به خاطر ابزارهای منبع آزاد مشهور شده بود را برای دسترسی به این فناوری استخدام کرد.
انواع داده‌ها
انواع داده‌های زیر مورد حمایت RPG هستند:
نکته:
کاراکتر ستون نوع داده‌ها کاراکتری است که در Definition Specification در ستون طراحی شده برای نوع داده‌ها کدگذاری می‌شود. برای مقایسه، در زبانی مانند C، که در ان تعریف متغیرها فرمت آزاد است و از یک کلید واژه مانند int برای اعلان یک متغیر صحیح استفاده می‌کند در RPG، متغیر با Definition Specification فرمت ثابت تعریف می‌شود. در Definition Specification که با حرف D در ستون ۶ خط منبع نشان داده می‌شود کاراکتر نوع داده‌ها در ستون ۴۰ کدگذاری می‌شود. همچنین، اگر کاراکتر data type (نوع داده‌ها) حذف شود یعنی خانه خالی شود چنانچه هیچ موقعیت دهدهی مشخص نشود پیش‌فرض A خواهد بود. در غیر این صورت پیش‌فرض P خواهد بود.
Data type
Name
Length
Description
A
Alphanumeric character
1 to 16,773,104 bytes (fixed)1 to 16,773,100 bytes (varying-length)
Alphanumeric character
B
Binary numeric
1 byte (8-bit)2 byte (16-bit)4 bytes (32-bit)8 bytes (64-bit)
Signed binary integer
C
UCS-2 character
1 to 8,386,552 characters (fixed)1 to 8,386,550 characters (varying)
16-bit UCS-2 character (DBCS or EGCS)
D
Date
10 bytes
Date: year, month, day
F
ممیز شناور numeric
4 bytes (32-bit)8 bytes (64-bit)
Signed binary floating-point real
G
Graphic character
1 to 8,386,552 characters (fixed)1 to 8,386,550 characters (varying)
16-bit graphic character (DBCS or EGCS)
I
Integer numeric
1 byte (8-bit)2 bytes (16-bit)4 bytes (32-bit)8 bytes (64-bit)
Signed binary integer
N
نوع داده بولی
1 byte
1 = TRUE0 = FALSE
O
Object
Size undisclosed
Object reference
P
Packed decimal numeric
1 to 63 digits,2 digits per byte plus sign
Signed fixed-point decimal number with integer and fraction digits
S
Zoned decimal numeric
1 to 63 digits,1 digit per byte
Signed fixed-point decimal number with integer and fraction digits
T
Time
8 bytes
Time: hour, minute, second
U
Integer numeric
1 byte (8-bit)2 bytes (16-bit)4 bytes (32-bit)8 bytes (64-bit)
Unsigned binary integer
Z
Timestamp
26 bytes
Date and time:year, month, day, hour, minute, second, microseconds
Basing-PointerProcedure-PointerSystem-Pointer
16 bytes
Address to DataAddress to Activated ProcedureAddress to Object
نمونه کد
برنامه زیر شماره‌هایی را به عنوان پارامترهای ورودی از کاربر می‌گیرد و اسم و آدرس را به عنوان پارامترهای خروجی تحویل می‌دهد این نسخه ابتدایی‌ترین کد RPG IV می‌باشد شبیه این برنامه بعدا با نسخه‌ها و دستورات جدید‌تر نشان داده خواهد شد.
* Historically RPG was columnar in nature, though free-formatting
* was allowed under particular circumstances.
* The purpose of various lines code are determined by a
* letter code in column 6.
* An asterisk (*) in column 7 denotes a comment line
* "F" (file) specs define files and other i/o devices
F ARMstF1 IF E K Disk Rename(ARMST:RARMST)
* "D" specs are used to define variables
D pCusNo S 6p
D pName S 30a
D pAddr1 S 30a
D pAddr2 S 30a
D pCity S 25a
D pState S 2a
D pZip S 10a
* "C" (calculation) specs are used for executable statements
* Parameters are defined using plist and parm opcodes
C *entry plist
C parm pCusNo
C parm pName
C parm pAddr1
C parm pAddr2
C parm pCity
C parm pState
C parm pZip
* The "chain" command is used for random access of a keyed file
C pCusNo chain ARMstF1
* If a record is found, move fields from the file into parameters
C if %found
C eval pName = ARNm01
C eval pAddr1 = ARAd01
C eval pAddr2 = ARAd02
C eval pCity = ARCy01
C eval pState = ARSt01
C eval pZip = ARZp15
C endif
* RPG makes use of switches. One switch "LR" originally stood for "last record"
* LR flags the program and its dataspace as removable from memory
C eval *InLR = *On
همان برنامه می‌باشد که با استفاده از محاسبات در دسترس V5R1 نوشته شده‌است
* "F" (file) specs define files and other i/o devices
FARMstF1 IF E K Disk Rename(ARMST:RARMST)
* "D" specs are used to define variables and parameters
* The "prototype" for the program is in a separate file
* allowing other programs to call it
/copy cust_pr
* The "procedure interface" describes the *ENTRY parameters
D getCustInf PI
D pCusNo 6p 0 const
D pName 30a
D pAddr1 30a
D pAddr2 30a
D pCity 25a
D pState 2a
D pZip 10a
/free
// The "chain" command is used for random access of a keyed file
chain pCusNo ARMstF1;
// If a record is found, move fields from the file into parameters
if %found;
pName = ARNm01;
pAddr1 = ARAd01;
pAddr2 = ARAd02;
pCity = ARCy01;
pState = ARSt01;
pZip = ARZp15;
endif;
// RPG makes use of switches. One switch "LR" originally stood for "last record"
// LR actually flags the program and its dataspace as removable from memory.
*InLR = *On;
/end-free
فرض کنید مثال جدول ARMSTF1 با استفاده از دستورات SQL ایجاد شده بود:
create table armstf1
(arcnum decimal(7,0),
arname char(30),
aradd1 char(30),
aradd2 char(30),
arcity char(25),
arstte char(2),
arzip char(10))
همان برنامه با استفاده از محاسبات SQL جاسازی شده:
* RPG IV no longer requires the use of the *INLR indicator to terminate a program.
* by using the MAIN keyword on the "H" (Header) spec, and identifying the "main" or
* entry procedure name, the program will begin and end normally without using the
* decades-old RPG Cycle and instead a more "C like" begin and end logic.
H MAIN(getCustInf)
* "D" specs are used to define variables and parameters
* The "prototype" for the program is in a separate file
* allowing other programs to call it
/copy cust_pr
* The "procedure interface" describes the *ENTRY parameters
P getCustInf B
D getCustInf PI
D pCusNo 6p 0 const
D pName 30a
D pAddr1 30a
D pAddr2 30a
D pCity 25a
D pState 2a
D pZip 10a
/free
exec sql select arName, arAddr1, arAdd2, arCity, arStte, arZip
into :pName, :pAddr1, :pAddr2, :pCity, :pState, :pZip
from ARMstF1
where arCNum = :pCusNo
for fetch only
fetch first 1 row only
optimize for 1 row
with CS;
/end-free
P GetCustInf E
با وجود سیستم عامل V7R1 لازم نیست برنامه بالا به‌طور جداگانه فایلی حاوی پروتوتایپ داشته باشد بنا بر این می‌توان آن را به صورت زیر نوشت:
H main(GetCustInf)
D ARMSTF1 E DS
P GetCustInf B
D GetCustInf PI extpgm(CUS001)
D inCusNo like(arCNum) const
D outName like(arName)
D outAddr1 like(arAdd1)
D outAddr2 like(arAdd2)
D outCity like(arCity)
D outState like(arStte)
D outZip like(arZip)
/free
exec sql select arName, arAdd1, arAdd2, arCity, arStte, arZip
into :outName, :outAddr1, :outAddr2, :outCity, :outState,
:outZip
from ARMSTF1
where arCNum = :inCusNo
fetch first 1 row only
with CS
use currently committed;
/end-free
P GetCustInf E
درنهایت اگر شما برای سیستم عامل ۷٫۱ خود از کامپایلر PTFS استفاده کنیم کد بالا به صورت مستقل مانند زیر نوشته می‌شود:
ctl-opt main(GetCustInf);
dcl-ds ARMSTF1 ext end-ds;
dcl-proc GetCustInf;
dcl-pi *n extpgm(CUS001);
inCusNo like(arCNum) const;
outName like(arName);
outAddr1 like(arAdd1);
outAddr2 like(arAdd2);
outCity like(arCity);
outState like(arStte);
outZip like(arZip);
end-pi;
exec sql select arName, arAdd1, arAdd2, arCity, arStte, arZip
into :outName, :outAddr1, :outAddr2, :outCity, :outState,
:outZip
from ARMSTF1
where arCNum = :inCusNo
fetch first 1 row only
with CS
use currently committed;
return;
end-proc;
پلتفرم‌ها
همان‌طور که در بالا گفته شد زبان برنامه‌نویسی RPG ابتدا توسط ای بی‌ام برای تملک ۱۴۰۱، ۳۶۰/، ۳/، ۳۴/، ۳۶/، 38/ AS/۴۰۰ و سیستم‌های System i معرفی شد. همچنین کاربردهایی برای Digital VAX, Sperry Univac BC/7، Univac system 80، Siemens BS2000، Burroughs B700، B1700، Hewlett Packard HP3000، مجموعه‌های ICL 2900، Honeywell 6220 و ۲۰۲۰، مجموعه‌های Four-Phase IV/60 و IV/90، Singer System 10 و WANG VS و همچنین کمپایلرهای متفرقه و محیط‌های عادی برای سیستم‌های مبتنی بر یونیکس مانند Infinite 36 (قبلا Unibol 36 نامیده می‌شد) و PCها (Baby/400، Lattice- RPG) نیز وجود داشت.
آخرین پلتفرمی که کمپایلر RPG را دریافت می‌کند Windows.Net از طریق کمپایلر WIN RPG است که با I-Net System Solutions در مارس ۲۰۱۳ خریداری شد. این نسخه شامل پسوندهایی برای RPG IV فراتر از کمپایلر IBM پایگاه است. این پسوندها برای مایکروسافت ویندوز و Net قلاب‌هایی را در Native و در محیط System 36 فراهم می‌کنند و همچنین توانایی وارد کردن فایل‌های DB/2 به پایگاه داده‌های Microsoft Access و Microsoft SQL Server را از طریق ODBC برای آن‌ها فراهم می‌کنند.
برنامه‌های کاربردی RPG II هنوز هم در سیستم‌های عامل z/VSE و z/OS ای بی‌ام، سیستم عامل HP MPE در HP3000 و سیستم عامل OpenVMS در VAX, Alpha و Unisys MCP و Windows Servers و Desktops در I-Net RPG حمایت می‌شوند.