友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第96章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






    PREV_PAY                       NUMBER(8;2) 



    先来看一下数据 



                                                                         400 


…………………………………………………………Page 401……………………………………………………………

SQL 21  日自学通(V1。0)                                                             翻译人     笨猪 



输入 



     SQL》 select * from pay_table order by pay_type; pay_rate desc; 



输出 



NAME                       PAY_TYPE         PAY_RATE        EFF_DATE PREV_PAY 



SANDRA SAMUELS             HOURLY                    12。50  01…JAN…97 



ROBERT BOBAY               HOURLY                    11。50  15…MAY…96 



KEITH JONES                HOURLY                    10。00  31…OCT…96 



SUSAN WILLIAMS             HOURLY                     9。75  01…MAY…97 



CHRISSY ZOES               SALARY                 50000。00  01…JAN…97 



CLODE EVANS                SALARY                 42150。00  01…MAR…97 



JOHN SMITH                 SALARY                 35000。00  15…JUN…96 



KEVIN TROLLBERG            SALARY                 27500。00  15…JUN…96 



     现实情况        由于销售情况很好  你需要给为你工作的时间超过了六个月的个人增加薪 



金    符合条件的钟点工的薪金增加 4%                    而符全条件的雇员的薪金需要增加 5% 



     今天的日期是 



     输入/输出 



     SQL》 select sysdate from dual 



     SYSDATE 



     20…MAY…97 



     在对下边的 PL/SQL         语句块进行检查之前              我们要对 PAY_TABLE  表进行手工的选择 



以找出都有哪些人需要增加薪金 



输入 



     SQL》 select name; pay_type; pay_rate; eff_date; 



         2                  'YES'  due 



         3    from  pay_table 



         4    where  eff_date  《  sysdate   180 



         5    UNION  ALL 



         6    select  name;  pay_type;  pay_rate;  eff_date; 



         7                  'No'  due 



         8    from  pay_table 



         9    where  eff_date  》=  sysdate   180 



                                                                                        401 


…………………………………………………………Page 402……………………………………………………………

SQL 21  日自学通(V1。0)                                                                        翻译人      笨猪 



       10    order  by  2;  3  desc; 



输出 



   NAME                         PAY_TYPE          PAY_RATE          EFF_DATE          DUE 



    SANDRA SAMUELS              HOURLY                      12。50   01…JAN…97         No 



    ROBERT BOBAY                HOURLY                      11。50   15…MAY…96         YES 



    KEITH JONES                 HOURLY                      10。00   31…OCT…96         YES 



    SUSAN WILLIAMS              HOURLY                       9。75   01…MAY…97           No 



    CHRISSY ZOES                SALARY                   50000。00   01…JAN…97         No 



    CLODE EVANS                 SALARY                   42150。00   01…MAR…97         No 



    JOHN SMITH                  SALARY                   35000。00   15…JUN…96         YES 



    KEVIN TROLLBERG             SALARY                   27500。00   15…JUN…96         YES 



     DUE 列的内容是确定每一个人是否有增加工资的资格                                       下边是 PL/SQL  的脚本 



输入 



     set serveroutput on 



     BEGIN 



         DECLARE 



             UnknownPayType  exception; 



             cursor  pay_cursor  is 



                 select  name;  pay_type;  pay_rate;  eff_date; 



                               sysdate;  rowid 



                 from  pay_table; 



             IndRec  pay_cursor%ROWTYPE; 



             cOldDate  date; 



             fNewPay  number(8;2); 



         BEGIN 



             open  pay_cursor; 



             loop 



             fetch  pay_cursor  into  IndRec; 



             exit  when  pay_cursor%NOTFOUND; 



             cOldDate  :=  sysdate   180; 



         if (IndRec。pay_type = 'SALARY') then 



                                                                                                     402 


…………………………………………………………Page 403……………………………………………………………

SQL 21  日自学通(V1。0)                                                                                        翻译人        笨猪 



                  fNewPay  :=  IndRec。pay_rate  *  1。05; 



              elsif  (IndRec。pay_type  =  'HOURLY')  then 



                  fNewPay  :=  IndRec。pay_rate  *  1。04; 



              else 



                  raise  UnknownPayType; 



              end  if; 



              if  (IndRec。eff_date  《  cOldDate)  then 



                  update  pay_table 



                  set  pay_rate  =  fNewPay; 



                          prev_pay  =  IndRec。pay_rate; 



                          eff_date  =  IndRec。sysdate 



                  where  rowid  =  IndRec。rowid; 



                  mit; 



              end  if; 



              end  loop; 



              close  pay_cursor; 



          EXCEPTION 



              when  UnknownPayType  then 



                  dbms_output。put_line('======================='); 



                  dbms_output。put_line('ERROR:  Aborting  program。'); 



                  dbms_output。put_line('Unknown  Pay  Type  for  Name'); 



              when  others  then 



                  dbms_output。put_line('ERROR  During  Processing。    See  the  DBA。'); 



              END; 



      END; 



      / 



      你是否已经决定了要给这四个雇员增加工资                                              在上边的 SELECT               语句中有四个人有 



YES     标记         为什么不呢               让我们给所有的这四个人加薪吧                                    你可以通过运行名字叫 



block2。sql 的脚本来自动为这四个人进行合理的加薪 



输入/输出 



                                                                                                                      403 


…………………………………………………………Page 404……………………………………………………………

SQL 21  日自学通(V1。0)                                                翻译人    笨猪 



    SQL》 @block2 



    Input truncated to 1 characters 



    PL/SQL procedure successfully pleted。 



    你可以作一个快速的检查也确定对于每个人的薪金的增加比率是多少 



输入 



    SQL》 select * from pay_table order by pay_type; pay_rate desc 



输出 



       NAME           PAY_TYPE     PAY_RATE      EFF_DATE       PREV_PAY 



SANDRA SAMUELS       HOURLY             12。50    01…JAN…97 



ROBERT BOBAY         HOURLY             11。96    20…MAY…97             11。5 



KEITH JONES          HOURLY             10。40    20…MAY…97               10 



SUSAN WILLIAMS       HOURLY              9。75    01…MAY…97 



CHRISSY ZOES         SALARY          50000。00    01…JAN…97 



CLODE EVANS          SALARY          42150。00    01…MAR…97 



JOHN SMITH           SALARY          36750。00    20…MAY…97            35000 



KEVIN TROLLBERG      SALARY          28875。00    20…MAY…97            27500 



分析 



    四个雇员的薪金已经增加了  如果将现在的输出和原来的 SELECT  的输出做比较的话 



你会发现相应的改变           当前的薪金率的变化反映和薪金的增加  原有的薪金率被插入到了 



PREV_PAY  列中  而有效日期则被更新为当前的日期                  没有符合资格的人的情况则没有任 



何变化 



    请等一下     我们没有看到定义的异常工作的机会                 你可以向 PAY_TABLE  表中插入一 



个不合法的记录来对异常部分进行检测 



输入 



    SQL》 insert into pay_table values 



        2    ('JEFF  JENNINGS';'WEEKLY';71。50;'01…JAN…97';NULL); 



输出 



    1 row created。 



输入/输出 



    SQL》 @block2 



                                                                         404 


…………………………………………………………Page 405……………………………………………………………

SQL 21  日自学通(V1。0)                                                     
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!