我写了动态SQL来显示一个学生的信息,当用户输入ID时,输入了学号,显示文件中的下一屏信息没有数据。所有字段都来自 WUSTDP,我还没有到达使用其他文件/表的部分。
我希望看到有关学生的信息,包括地址、电话号码、ssn、姓名和电子邮件
显示文件
INDARA
A CA12(12 'CANCEL')
A CA03(03 'EXIT')
A R STUDSEL
A 1 2'Lab 12'
A 1 30'Wibaux University'
A 2 23'Student Registration aplication'
A 1 71DATE
A 6 23'Student Number'
A 9 23'Type value, then enter.'
A 15 3'F3=Exit F12=Cancel'
A STUDNT 9D I 6 40
A R DISPSTUD
A 1 2'Lab 12'
A 1 30'Wibaux University'
A 2 23'Student Registration aplication'
A 1 71DATE
A 3 10'Student ID:'
A 4 10'Student Name:'
A 5 10'Address:'
A 6 10'Phone:'
A 7 10'Email:'
A 16 4'F3=Exit F12=Cancel'
A STUDNAME 36 B 4 30
A ADDRESS 39 B 5 30
A PHONE R B 6 30REFFLD(STUDREC/PHONE FLIGHT2023/WUS-
A TDP)
A SEMAIL R B 7 30REFFLD(STUDREC/SEMAIL FLIGHT2023/WU-
A STDP)
A 9 10'Section Number'
A SECTION R B 9 30REFFLD(SECREC/SECTION FLIGHT2023/WU-
A SCTP)
A STUSSN R B 3 30REFFLD(STUDREC/STUSSN FLIGHT2023/WU-
A STDP)
A R REGCOMPLT
A 1 2'Lab 12'
A 1 30'Wibaux University'
A 2 23'Student Registration aplication'
A 1 71DATE
A 3 10'Student ID:'
A 4 10'Student Name:'
A 5 10'Address:'
A 6 10'Phone:'
A 7 10'Email:'
A 9 10'Class Information'
A 10 10'Dept:'
A 10 20'Course:'
A 10 35'Section:'
A 10 52'Credits:'
A 11 10'Meets:'
A 16 4'F3=Exit F12=Cancel'
A STUSSN R B 3 30REFFLD(STUDREC/STUSSN FLIGHT2023/WU-
A STDP)
A STUDNAME 36 B 4 30
A ADDRESS 39 B 5 30
A PHONE R B 6 30REFFLD(STUDREC/PHONE FLIGHT2023/WUS-
A TDP)
A SEMAIL R B 7 30REFFLD(STUDREC/SEMAIL FLIGHT2023/WU-
A STDP)
A SECTION R B 9 30REFFLD(SECREC/SECTION FLIGHT2023/WU-
A SCTP)
A DEPT R B 10 15REFFLD(CRSREC/DEPT FLIGHT2023/WUCRS-
A P)
A COURSE R B 10 28REFFLD(CRSREC/COURSE FLIGHT2023/WUC-
A RSP)
A CREDIT R B 10 60REFFLD(CRSREC/CREDIT FLIGHT2023/WUC-
A RSP)
A SECTION1 R B 10 44REFFLD(SECREC/SECTION FLIGHT2023/WU-
A SCTP)
A SECDAY R B 11 17REFFLD(SECREC/SECDAY FLIGHT2023/WUS-
A CTP)
A SECTIM R B 11 21REFFLD(SECREC/SECTIM FLIGHT2023/WUS-
A CTP)
A 13 10'Press enter to confirm enrolment'
A R REGMSG
A 1 2'Lab 12'
A 1 30'Wibaux University'
A 2 23'Student Registration aplication'
A 1 71DATE
A 11 25'Registration completed'
A 12 21'You have been added to the section-
A .'
A 18 13'Press Enter to continue'
A 20 1'F3=Exit F12 = Cancel'
A R ERROR
A 1 28'ERROR'
A 4 14'oNE OR MORE THINGS WERE ENTERED IN-
A CORRECTLY'
A 10 2'F3=EXIT F12=CANCEL'
A R RECORD1
A*%%RS+<record-sequences>
A*%%RS+ <sequence name="Untitled">
A*%%RS+ <device type="display" width="80" height="24" />
A*%%RS+ </sequence>
A*%%RS </record-sequences>
SQLRPGLE 文件
**FREE
//--------------------------------------------------------- WUSTDP, WUSCTP, WUCRSP, and WUENRLP
// AUTHOR: VICTOR HERNANDEZ
// DATE: 3/8/2024
// PROGRAM NAME: LAB12RPG
// PURPOSE: ALLOW A STUDENT TO INTERACT WITH A DISPLAY FILE IN ORDER TO SIGN UP FOR CLASSES
// --------------------------------------------------------FILES
//ctl-opt option(*nodebugio:*srcstmt) ;
DCL-F LAB12SCRN1 WORKSTN INDDS(INDICATORS);
DCL-F WUSTDP USAGE(*OUTPUT:*INPUT);
DCL-F WUSCTP USAGE(*OUTPUT:*INPUT);
DCL-F WUCRSP USAGE(*OUTPUT);
DCL-F WUENRLP USAGE(*OUTPUT);
//---------------------------------------------------------VARIABLES
Dcl-ds Indicators len(99);
Exit Ind pos(3); //Exit
Cancel Ind pos(12); //Cancel
FKey Ind pos(25); //vldcmdkey
StudIDErr Ind pos(30); //Student ID error
SecNumErr Ind pos(35); //Section number error
Enter Ind pos(40); //Enter
END-DS;
//---------------------------------------------------------VARIABLES
dcl-s SqlString char(100);
//---------------------------------------------------------DATA STRUCTURES
dcl-ds StudInfo;
xStussn Zoned(9:0);
xStudname char(36);
xAddress char(39);
xPhone zoned(10:0);
xSEmail char(30);
END-DS;
dcl-ds ClassInfo;
XDept char(3); //WUCRSP
XCourse zoned (3:0); //WUCRSP & WUSTDP
XSection zoned(5:0); //WUSCTP & WUENRLP
XSecday char(3); //WUSCTP
xsectim zoned(4:0); // WUSCTP
XCredit zoned(1:0); //WUCRSP
END-DS;
//---------------------------------------------------------Main
Exfmt Studsel;
SqlString = 'SELECT STUSSN, (SFNAME CONCAT " " CONCAT SLNAME), '+
'(STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE), '+
'PHONE, SEMAIL '+
'FROM WUSTDP '+
'WHERE STUSSN = ?';
clear StudInfo;
EXEC SQL PREPARE CUR FROM :SqlString;
//exec sql EXECUTE CUR USING :StudInfo;
EXEC SQL DECLARE STUDCUR CURSOR FOR CUR;
EXEC SQL OPEN STUDCUR using :Studnt;
EXEC SQL FETCH STUDCUR INTO :StudInfo;
STUSSN = XSTUSSN;
STUDNAME = XSTUDNAME;
ADDRESS = XADDRESS;
PHONE = XPHONE;
SEMAIL = XSEMAIL;
Exfmt Dispstud;
Exec SQL close studcur;
*Inlr = *On;
Return;
我不能称自己是显示文件方面的大专家,但在我看来,值得做以下事情:
此外,对于 STUDNT 字段,我不会将模式设置为 I,而是设置为 B。对于所有其他字段(如果它们不打算更改)- 不是 B,而是 O
此外,在我看来,在这种情况下不需要动态 SQL - 它更消耗资源。静态SQL在这里更合适。
exec SQL declare curGetStudent cursor for
SELECT STUSSN,
(SFNAME CONCAT " " CONCAT SLNAME),
(STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE),
PHONE,
SEMAIL
FROM WUSTDP
WHERE STUSSN = :Studnt;
exec SQL open curGetStudent;
exec SQL fetch curGetStudent into :StudInfo;
此外,如果选择的结果是一条记录,则不需要光标。可以直接
exec SQL SELECT STUSSN,
(SFNAME CONCAT " " CONCAT SLNAME),
(STREET CONCAT " " CONCAT CITY CONCAT " " CONCAT STATE),
PHONE,
SEMAIL
INTO :StudInfo
FROM WUSTDP
WHERE STUSSN = :Studnt;