课程 1.3: 交互式修改数据

正如您可以在 Db2 表格中查询数据并通过在SPUFI中发出SQL语句来创建数据库对象,您也可以在 Db2 表格中插入、更新和删除数据。 在本课中,您将在上一课创建的MY_EMP表中为新员工添加一行,修改该行中的值,最后删除新行。 在此过程中,您将学习如何使用SPUFI验证每个操作的结果。

准备工作

您根据您的授权ID创建了MY_EMP表,如课程 1.2: 创建表 中所述。

过程

  1. 打开 DB2I ,设置子系统 ID,然后按照课程 1.1: 以交互方式查询数据的步骤 1-5 所述在 SPUFI 中打开 USER.SRCLIB.TUTORIAL ( SQLTEXT ) 数据集。
  2. 删除您在之前课程中输入的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                 
  3. 假设您的公司准备招聘一名新员工。 您必须在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                 
  4. 按 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 中,您学习了如何使用任何消息和代码来排除对报表的故障。
  5. 通过发出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                     
    ---------+---------+---------+---------+---------+---------+---------+---------+
    
  6. 假设新员工具有出色的谈判技巧,公司决定将她的薪水提高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    
    ---------+---------+---------+---------+---------+---------+---------+---------+ 
  7. 通过发出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                                               
  8. 尽管新员工获得了加薪,但他还是决定接受其他公司的聘用。 发出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     
  9. 通过发出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=Cancel                                               

    DSNE610I 消息表明返回了0行,这意味着员工编号300010不再包含在MY_EMP表中。

结果

在本课中,您学习了如何在SPUFI中以交互方式完成以下任务:

  • 更新一行数据
  • 删除一行数据
  • 验证操作结果