课程 1.3: 交互式修改数据
正如您可以在 Db2 表格中查询数据并通过在SPUFI中发出SQL语句来创建数据库对象,您也可以在 Db2 表格中插入、更新和删除数据。 在本课中,您将在上一课创建的MY_EMP表中为新员工添加一行,修改该行中的值,最后删除新行。 在此过程中,您将学习如何使用SPUFI验证每个操作的结果。
准备工作
您根据您的授权ID创建了MY_EMP表,如课程 1.2: 创建表 中所述。
过程
- 打开 DB2I ,设置子系统 ID,然后按照课程 1.1: 以交互方式查询数据的步骤 1-5 所述在 SPUFI 中打开 USER.SRCLIB.TUTORIAL ( SQLTEXT ) 数据集。
- 删除您在之前课程中输入的SQL语句。您可以通过发送 Dn 行命令从数据集中删除行,其中 n 是要删除的行数。例如,以下命令从数据集中删除九行:
File Edit Edit_Settings Menu Utilities Compilers Test Help EDIT USER.SRCLIB.TUTORIAL(SQLTEXT) - 01.29 Columns 00001 00072 Command ===> Scroll ===> PAGE ****** ***************************** Top of Data ****************************** 000100 00d901 --SELECT * FROM DSN8C10.EMP 000102 --SELECT EMPNO, SALARY + COMM AS TOTAL_SAL 000103 --FROM DSN8C10.EMP 000104 --ORDER BY TOTAL_SAL 000110 -- CREATE TABLE MY_EMP LIKE DSN8C10.EMP; 000200 -- INSERT INTO MY_EMP 000300 -- SELECT * FROM DSN8C10.EMP; 000400 000500 -- SELECT * FROM MY_EMP; 000600 ****** **************************** Bottom of Data **************************** F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel - 假设您的公司准备招聘一名新员工。 您必须在MY_EMP表中为新员工添加一行数据。
在下面的示例INSERT语句中,第一组括号中的每个项目都是MY_EMP表中的列名。 第二组括号中的每个数值都是将添加到相应列中的数值。 例如,EMPNO列将添加300010,FIRSTNME列将添加VICTORIA,以此类推。 有关INSERT语句的语法和选项的更多信息,请参阅 INSERT语句。
请记住,您在上节课中根据示例 EMP 表的格式创建了 MY_EMP 表。 有关表格格式和内容的详细信息,请参阅员工表格( DSN8C10.EMP )。
File Edit Edit_Settings Menu Utilities Compilers Test Help EDIT USER.SRCLIB.TUTORIAL(SQLTEXT) - 01.30 Columns 00001 00072 Command ===> Scroll ===> PAGE ****** ***************************** Top of Data ****************************** 000100 INSERT INTO MY_EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, 000600 WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 000610 SEX, BIRTHDATE, SALARY, BONUS, COMM) 000620 VALUES ('300010', 'VICTORIA', 'M', 'OFALLON', 'D11', '5240', 000630 '2014-04-21', 'DESIGNER', 16, 'F', '1996-07-03', 30000.00, 000640 300.00, 0.00); 000700 ****** **************************** Bottom of Data **************************** F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel - 按 PF3 ,然后按回车键发布声明。结果在 “浏览”面板中显示:
Menu Utilities Compilers Help BROWSE TUTOR01.MYOUTPUT Line 00000000 Col 001 080 Command ===> Scroll ===> PAGE ********************************* Top of Data ********************************** ---------+---------+---------+---------+---------+---------+---------+---------+ INSERT INTO MY_EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, 00010030 WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 00060030 SEX, BIRTHDATE, SALARY, BONUS, COMM) 00061030 VALUES ('300010', 'VICTORIA', 'M', 'OFALLON', 'D11', '5240', 00062030 '2014-04-21', 'DESIGNER', 16, 'F', '1996-07-03', 30000.00, 00063030 300.00, 0.00) 00064030 00070023 00080023 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE615I NUMBER OF ROWS AFFECTED IS 1 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE617I COMMIT PERFORMED, SQLCODE IS 0 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel请记住: 在课程 1.1 中,您学习了如何使用任何消息和代码来排除对报表的故障。 - 通过发出SELECT语句查询MY_EMP表,验证该行是否已插入。以下示例中的 SELECT 语句包含一个 WHERE 子句,仅返回您添加的新行。
File Edit Edit_Settings Menu Utilities Compilers Test Help EDIT USER.SRCLIB.TUTORIAL(SQLTEXT) - 01.30 Columns 00001 00072 Command ===> Scroll ===> PAGE ****** ***************************** Top of Data ****************************** 000100 --INSERT INTO MY_EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, 000600 -- WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 000610 -- SEX, BIRTHDATE, SALARY, BONUS, COMM) 000620 --VALUES ('300010', 'VICTORIA', 'M', 'OFALLON', 'D11', '5240', 000630 -- '2014-04-21', 'DESIGNER', 16, 'F', '1996-07-03', 30000.00, 000640 -- 300.00, 0.00); 000700 000800 SELECT * FROM MY_EMP WHERE EMPNO='300010'; ****** **************************** Bottom of Data **************************** F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel将返回以下结果:---------+---------+---------+---------+---------+---------+---------+---------+ EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE J ---------+---------+---------+---------+---------+---------+---------+---------+ 300010 VICTORIA M OFALLON D11 5240 2014-04-21 D DSNE610I NUMBER OF ROWS DISPLAYED IS 1 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100 ---------+---------+---------+---------+---------+---------+---------+---------+ - 假设新员工具有出色的谈判技巧,公司决定将她的薪水提高10%。 发布UPDATE语句,增加您添加的员工的工资。有关UPDATE语句的语法和选项的更多信息,请参阅 UPDATE语句。
File Edit Edit_Settings Menu Utilities Compilers Test Help EDIT USER.SRCLIB.TUTORIAL(SQLTEXT) - 01.32 Columns 00001 00072 Command ===> Scroll ===> PAGE ****** ***************************** Top of Data ****************************** 000100 --INSERT INTO MY_EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, 000600 -- WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 000610 -- SEX, BIRTHDATE, SALARY, BONUS, COMM) 000620 --VALUES ('300010', 'VICTORIA', 'M', 'OFALLON', 'D11', '5240', 000630 -- '2014-04-21', 'DESIGNER', 16, 'F', '1996-07-03', 30000.00, 000640 -- 300.00, 0.00); 000700 -- SELECT * FROM MY_EMP WHERE EMPNO='300010'; '''''' 000710 UPDATE MY_EMP 000720 SET SALARY = SALARY + 3000 000730 WHERE EMPNO = '300010'; 000800 ****** **************************** Bottom of Data **************************** F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel以下信息表明UPDATE语句成功:---------+---------+---------+---------+---------+---------+---------+---------+ DSNE615I NUMBER OF ROWS AFFECTED IS 1 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ - 通过发出SELECT语句来验证更改是否已应用。例如,您可能发布一条语句,返回以下结果:
Menu Utilities Compilers Help BROWSE TUTOR01.MYOUTPUT Line 00000000 Col 001 080 Command ===> Scroll ===> PAGE ********************************* Top of Data ********************************** ---------+---------+---------+---------+---------+---------+---------+---------+ --INSERT INTO MY_EMP (EMPNO, FIRSTNME, MIDINIT, LASTNAME, 00010031 -- WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 00060031 -- SEX, BIRTHDATE, SALARY, BONUS, COMM) 00061031 --VALUES ('300010', 'VICTORIA', 'M', 'OFALLON', 'D11', '5240', 00062031 -- '2014-04-21', 'DESIGNER', 16, 'F', '1996-07-03', 30000.00, 00063031 -- 300.00, 0.00); 00064031 SELECT EMPNO, LASTNAME, FIRSTNME, SALARY FROM MY_EMP 00070034 WHERE EMPNO='300010'; 00070134 ---------+---------+---------+---------+---------+---------+---------+---------+ EMPNO LASTNAME FIRSTNME SALARY ---------+---------+---------+---------+---------+---------+---------+---------+ 300010 OFALLON VICTORIA 31000.00 DSNE610I NUMBER OF ROWS DISPLAYED IS 1 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100 ---------+---------+---------+---------+---------+---------+---------+---------+ F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel - 尽管新员工获得了加薪,但他还是决定接受其他公司的聘用。 发出DELETE语句,删除为新员工添加的行。以下示例显示了用于删除行的 DELETE 语句以及发出 DELETE 语句的结果。 有关DELETE语句的语法和选项的更多信息,请参阅 DELETE语句。
Menu Utilities Compilers Help BROWSE TUTOR01.MYOUTPUT Line 00000000 Col 001 080 Command ===> Scroll ===> PAGE ********************************* Top of Data ********************************** ---------+---------+---------+---------+---------+---------+---------+---------+ DELETE FROM MY_EMP 00010012 WHERE EMPNO = '300010'; 00011012 00020012 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE615I NUMBER OF ROWS AFFECTED IS 1 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE617I COMMIT PERFORMED, SQLCODE IS 0 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE601I SQL STATEMENTS ASSUMED TO BE BETWEEN COLUMNS 1 AND 72 DSNE620I NUMBER OF SQL STATEMENTS PROCESSED IS 1 DSNE621I NUMBER OF INPUT RECORDS READ IS 3 DSNE622I NUMBER OF OUTPUT RECORDS WRITTEN IS 15 ******************************** Bottom of Data ******************************** F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel - 通过发出SELECT语句来验证该行是否被删除。例如,您可以发出 SELECT 语句,返回以下结果:
Menu Utilities Compilers Help BROWSE TUTOR01.MYOUTPUT Line 00000000 Col 001 080 Command ===> Scroll ===> PAGE ********************************* Top of Data ********************************** ---------+---------+---------+---------+---------+---------+---------+---------+ SELECT * FROM MY_EMP 00010013 WHERE EMPNO = '300010'; 00011012 00020012 ---------+---------+---------+---------+---------+---------+---------+---------+ EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE J ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE610I NUMBER OF ROWS DISPLAYED IS 0 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 100 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE617I COMMIT PERFORMED, SQLCODE IS 0 DSNE616I STATEMENT EXECUTION WAS SUCCESSFUL, SQLCODE IS 0 ---------+---------+---------+---------+---------+---------+---------+---------+ DSNE601I SQL STATEMENTS ASSUMED TO BE BETWEEN COLUMNS 1 AND 72 DSNE620I NUMBER OF SQL STATEMENTS PROCESSED IS 1 DSNE621I NUMBER OF INPUT RECORDS READ IS 3 DSNE622I NUMBER OF OUTPUT RECORDS WRITTEN IS 17 F1=Help F2=Split F3=Exit F5=Rfind F7=Up F8=Down F9=Swap F10=Left F11=Right F12=CancelDSNE610I 消息表明返回了0行,这意味着员工编号300010不再包含在MY_EMP表中。
结果
在本课中,您学习了如何在SPUFI中以交互方式完成以下任务:
- 更新一行数据
- 删除一行数据
- 验证操作结果