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

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

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






                                                                                        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
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!