友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
富士康小说网 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

SQL 21日自学通(V3.0)(PDF格式)-第50部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!





%ROWTYPE 



INPUT 



    DECLARE 



        cursor  employee_cursor  is 



            select  emp_id;  emp_name  from  employees; 



        employee_record  employee_cursor%ROWTYPE 



分析 



    在上例中定义了一个叫 employee_record  的变量  %ROWTYPE 定义了这个变量的使它 



与 employee_cursor 所在行的数据类型相同         这个%ROWTYPE 属性定义的变量也称为集合 



变量 



                                                                        384 


…………………………………………………………Page 385……………………………………………………………

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



%ROWCOUNT 属性 



在 PL/SQL  中%ROWCOUNT 属性可以保证在特定的 SQL 语句块中的游标行数 



INPUT 



DECLARE 



    cursor  employee_cursor  is 



        select  emp_id;  emp_name  from  employees; 



    records_processed  :=  employee_cursor%ROWCOUNT; 



分析 



    在上例中变量 records_processed  将会返回 PL/SQL 语句所访问的 employee_cursor            的行 



数 



警告  在定义变量的时候要小心以访止它和表的名字相冲突                            例如    如果你定义的变量与 



你的 PL/SQL 语句块中所访问的表的名字是相同的                    那么变量的名字会优先于表的名字 



Procdure 部分 



    PROCDURE 部分是 PL/SQL 语句块中的必须部分  在这一部分将会使用变量和用户指 



针来操作数据库中的数据  PROCDURE 部分是一个块的主要部分  它包括条件语句和 SQL 



语句 



BEGIN           END 



    在一个语句块中  BEGIN         标明了一个过程的开始             与此类似  END      则标明了一个语 



句块的结束       下边的例子显示了一个 PROCDURE 部分的基本结构 



语法 



    BEGIN 



        open  a  cursor; 



        condition1 



            statement1 



        condition2 



            statement2 



                                                                             385 


…………………………………………………………Page 386……………………………………………………………

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



        condition3 



            statement3 



     close the cursor 



    END 



指针控制命令 



    现在你将学习如何在 PL/SQL             的语句块中定义一个指针  你需要知道如何来访问一个 



定义过的指针          这一部分诠释了基本的指针控制命令                      DECLARE     OPEN    FETCH  和 



CLOSE 



DECLARE 



    在今天的早些时候你已经学习了如何在 DELCARE                       部分定义一个指针  DECLARE             语 



句包括下列指针控制命令 



OPEN 



    现在你已经定义了一个指针  但是你应该如何去使用它呢                              如果你不使用打开这本书 



你无法看到它的内容的              同样  如果你不使用 OPEN  命令来打开一个指针你也将无法使用 



它   例如 



语法 



    BEGIN 



        open  employee_cursor; 



        statement1; 



        statement2; 



        。 



        END 



                                                                                 386 


…………………………………………………………Page 387……………………………………………………………

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



FETCH 



     FETCH  可以从一个指针中取得变量的值  这里有两个使用 FETCH  的例子  一个是取 



得一个集合变量             另外了个则取得特定的变量 



INPUT 



     DECLARE 



         cursor  employee_cursor  is 



             select  emp_id;  emp_name  from  employees; 



         employee_record  employee_cursor%ROWTYPE; 



     BEGIN 



         open  employee_cursor; 



         loop 



             fetch  employee_cursor  into  employee_record; 



         end  loop; 



         close  employee_cursor; 



     END 



分析 



     上一个例子中将一个指针所指的行的数据赋给了一个名字叫 employee_record  的变量 



它使用 LOOP 循环来移动指针                   当然  这个块事实上没有做任何工作 



     DECLARE 



         cursor  employee_cursor  is 



             select  emp_id;  emp_name  from  employees; 



         id_num  employees。emp_id%TYPE; 



         name  employees。emp_name%TYPE; 



     BEGIN 



         open  employee_cursor; 



         loop 



             fetch  employee_cursor  into  id_num;  name; 



         end  loop; 



         close  employee_cursor; 



                                                                                               387 


…………………………………………………………Page 388……………………………………………………………

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



    END 



分析 



    在这个例子中是把当前的指针所指的行的对应数据填入变量 id_num 和 name                     中  这两 



个变量是在 DECLARE 部分中定义的 



CLOSE 



    如果你已经在一个块中结束了对指针的使用时                  你应该将这个指针关闭           与你通常在 



读完一本书以后要将书合上一样             你应该使用 CLOSE 命令来关闭指针 



语法 



    BEGIN 



        open  employee_cursor; 



        statement1; 



        statement2; 



         。 



      。 close employee_cursor; 



    END 



分析 



    当关闭一个指针以后         查询的结果集就不复存在了            如果你想访问结果集中的数据你 



必须重新打开指针才行 



条件语句 



    现在我们得到了非常有用的东西来控制我们的 SQL 语句的运行  在 PL/SQL                     中的条件 



语句与大多数第三代编程语言是类似的 



IF     THEN 



    在大多数编程中 IF         THEN  语句可能是得常用的语句了           它决定了对于特定的条件 



应当执行哪一部分的操作           其结构如下 



语法 



                                                                     388 


…………………………………………………………Page 389……………………………………………………………

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



    IF condition1 THEN 



        statement1; 



    END IF 



    如果你需要对这两种情况进行分别处理  那么你可以将语句形式写成下边的样子 



语法 



    IF condition1 THEN 



        statement1 



    ELSE 



        statement2 



    END IF 



    如果你需要进行判断的条件多于两个  那么语句可以写成下边样子 



语法 



    IF condition1 THEN 



        statement1 



    ELSIF condition2 THEN 



        statement2 



    ELSE 



        statement3 



    END IF 



分析 



    在最后一个例子中          如果满足条件 1        那么就执行语句 1         如果满足条件 2        那么就会 



执行语句 2      否则的话就会执行语句 3           条件语句也可以嵌于其他语句和 LOOP 循环中 



LOOPS 循环 



    LOOPS 在 PL/SQL    的语句块中将不断地执行过程直到指定的条件满足为止  一共有三 



种循环 



    LOOP  本身是一个无限的循环  它经常在指针中使用  如果你想终止这种循环                                 你必 



须指定在什么时候退出             例如  在循环中翻阅指针的时候你可以指定当指针处于最后一行 



的时候退出循环  见下例 



                                                                             389 


…………………………………………………………Page 390……………………………………………………………

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



输入 



     BEGIN 



     open employee_cursor 



     LOOP 



      FETCH employee_cursor into employee_record 



        EXIT  WHEN  employee_cursor%NOTFOUND 



        statement1 



     END LOOP 



     close employee_cursor 



     END 



     %NOTFOUND      是指针的一种属性             它表明在当前指针中没有任何数据                      在上一个例 



子中如果指针没有发现数据就会退出循环                          假如你在循环中忽略了这条语句                    循环将会一 



直进行下去 



    WHILE…LOOP  则是在当条定条件满足时执行特定的语句  而当条件不在满足时就会从 



循环中退出转而执行下一条语句 



输入 



     DECLARE 



        cursor  payment_cursor  is 



            select  cust_id;  payment;  total_due  from  payment_table 



        cust_id  payment_table。cust_id%TYPE 



        payment  payment_table。payment%TYPE 



        total_due  payment_table。total_due%TYPE 



     BEGIN 



        open  payment_cursor 



      WHILE payment 《 total_due LOOP 



        FETCH payment_cursor into cust_id; payment; total_due 



            EXIT  WHEN  payment_cursor%NOTFOUND 



            insert  into  underpay_table 



            values  (cust_id;  'STILL  OWES') 



                                                                                       390 


…………………………………………………………Page 391……………………………………………………………

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



     END LOOP 



         close  payment_cursor 



分析 



     在上一个例子中使用了 WHILE…LOOP                       来对指针进行翻阅                 并且在当条件 



payment  start  proc1        or 



     SQL》  sta  proc1            or 



     SQL》 @proc1 



注  PL/SQL    脚本语言可以使用 START             命令或@字符来运行  它也可以被其它的 PL/SQL 



    脚本     SHELL 脚本或其它的程序调用 



将输入返回给用户 



     尤其是在捕获了错误的时候                 你可以会希望输出信息给用户告诉他出现了什么错误 



你可以转送已有的错误信息                  你也可以显示你所定制的错误信息                      对于用户来说这会与错 



误代码更容易理解             也许你想的是当在错误产生时让他们与数据库管理员联系而不是给他 



们尽可以准确的信息 



     PL/SQL  在它的语法部分中并没有提供直接的方式来显示输出                                 但是它可以让你来调 



用一个对该语句块服务的包  这个包是由 DBMS_OUTPUT  来调用的 



EXCEPTION 



    WHEN  zero_divide  THEN 



     DBMS_OUTPUT。put_line('ERROR:    DIVISOR  IS  ZERO。    SEE  YOUR  DBA。') 



分析 



     ZERO_DIVIDE 是 ORACLE 的一个预定义的异常  有许多在程序运行中产生的常见的 



错误都被预定义为异常并且可以被默认地激活  也就是说你不必在编程的过程中手动将其 



激活 



                                                                                       39
返回目录 上一页 下一页 回到顶部 9 9
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!