RPGLE sample program
Member Type TextMYNAME RPGLE My name
The program takes 4 parameters:
- Input First Name 20 char
- Input Last Name 20 char
- Input Age 3,0 Zoned Numeric
- Output is a Message putting together all the input values 100 char
d $first_name s 20 d $last_name s 20 d $my_age s 3s 0 d $message s 100 c *entry plist c parm $first_name c parm $last_name c parm $my_age c parm $message /free $message = 'My name is ' + %trim($first_name) + ' ' + %trim($last_name) + ' age ' + %trim(%editc($my_age:'Z')) + ' years !'; *inlr = *on; /end-free
Before we can create the Stored Procedure we need to warp this program using a SQLRPGLE program so that we can take the inputs and send the information in a ResultSet
Member Type Text
MYNAMEQ SQLRPGLE My name Stored Procedure Wrapper
d $first_name s 20 d $last_name s 20 d $my_age s 3s 0 d $message s 100 d MyName PR ExtPgm('MYNAME') d 20 d 20 d 3s 0 d 100 d @results ds occurs(1) d @message 100 d @var ds d @n 9b 0 c *entry plist c parm $first_name c parm $last_name c parm $my_age /free @n = 0; MyName($first_name:$last_name:$my_age:$message); @n = @n + 1; %occur(@results) = @n; @message = $message; EXEC SQL SET RESULT SETS ARRAY :@RESULTS FOR :@N ROWS; *inlr = *on; /end-free
What is the difference between this wrapper program and the original RPGLE?
- It's an SQLRPGLE source not a RPGLE source
- It has only the Input parameters
- The output is pushed into the ResutlSet
d @results ds occurs(100) d @line 4s 0 d @item 20 d @desc 50 d @qty 8s 0 //Dountil End of file //Read file based on key information @n = @n + 1; %occur(@results) = @n; @line = $file_line; @item = $file_item; @desc = $file_desc; @qty = $file_qty ; //Enddo EXEC SQL SET RESULT SETS ARRAY :@RESULTS FOR :@N ROWS;
Now lets create the Stored Procedure
Your can type STRSQL from command line or use I-Series Operations Navigator
CREATE PROCEDURE {library}/MYNAMEQ(IN FIRST_NAME CHAR ( 20), IN LAST_NAME CHAR ( 20), IN AGE NUMERIC (3, 0)) RESULT SETS 1 LANGUAGE RPGLE NOT DETERMINISTIC CONTAINS SQL CALLED ON NULL INPUT EXTERNAL NAME {library}/MYNAMEQ PARAMETER STYLE GENERAL
To Drop a procedure use command Drop {procedure_name}
Few handy Tips when creating Stored Procedures in iSeries
- Map iSeries(AS400) Zoned data to SQL Numeric field to avoid Decimal data errors
- Map iSeries(AS400) Packed data to SQL Decimal field to avoid Decimal data errors
- If your RPGLE program is also SQLRPGLE and using embedded SQL to manipulate data then you must choose the option 3 or 4 depending on the program. Take F4 on the Create Procedure statement
SQL usage . . . . . . 1 1=CONTAINS SQL
2=NO SQL
3=READS SQL DATA
4=MODIFIES SQL DATA
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.