八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第74部分

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

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

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






        DECLARE 以及EXCEPTION 部分 



    这里是 PL/SQL 块的基本结构 



    SYNTAX: 



    BEGIN                  … optional;  denotes  beginning  of  block 



        DECLARE          … optional;  variable  definitions 



        BEGIN              … mandatory;  denotes  beginning  of  procedure  section 



        EXCEPTION      … optional;  denotes  beginning  of  exception  section 



        END                  … mandatory;  denotes  ending  of  procedure  section 



    END                      … optional;  denotes  ending  of  block 



    请注意必要部分在第二个 BEGIN — — END           对中的     它构成了一个过程部分            当然 



在它们中间是有语句的 如果你使用了第一个 BEGIN                   那么你必须同时使用第二个 BEGIN 



反之亦然 



                                                                         381 


…………………………………………………………Page 382……………………………………………………………

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



注释 



    如果一个程序没有注释会怎样              编程语言提供了命令使你可以在你的代码中放放注 



释  PL/SQL 当然不例外  你可以在需要注释的行前加一短线                   公认的 PL/SQL 注释形式如 



下   多行注释则与 C 语言的注释方法相同 



    语法 



    …This is a one…line ment。 



    /* This is a 



    multiple…line ment。*/ 



注  PL/SQL  可以直接支持数据操作言语            DML   命令和数据查询        然而   它不支持数据 



   字典语言     DDL   命令    你通常会使用 PL/SQL      维护在数据库结构中的数据  但是并 



   不能维护这些结构 



DECLARE 部分 



    在 PL/SQL 的 DECLARE  部分包括了变量         常量  指针和特殊数据类型的定义  作为 



一个 PL/SQL   程序员    你可以在你的代码块中定义所有类型的变量                  但是你必须要指定数 



据类型     而且每一个变量都必须与 ORACLE            中所定义的数据类型一致  变量也要符合 



ORACLE 的对象命名标准 



变量声明 



    在 PL/SQL 语句块中变量的数据是可变以             在变量声明时必须对它加以定义              如有必 



须  还要进行初始化工作          下例中定义了一组在 PL/SQL  的 DECLARE 部分的变量 



    DECLARE 



        owner  char(10); 



        tablename  char(30); 



        bytes  number(10); 



        today  date 



分析 



    DECLARE  部分不能自动运行  DECLARE  部分以 DECLARE           语句开头      每一个变量 



                                                                      382 


…………………………………………………………Page 383……………………………………………………………

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



占一行  注意在每一个定义的变量后边都有一个分号 



    在 DECLARE 部分也可以对变量进行初始化工作  例如 



    DECLARE 



        customer  char(30); 



      fiscal_year number(2) := '97'; 



    你可以使用  =符号来进行初始化工作  或者说是赋给它一个初值  对于被定义为 NOT 



NULL  的变量你必须要赋初值 



    DECLARE 



        customer  char(30); 



      fiscal_year number(2) NOT NULL := '97'; 



分析 



    NOT NULL 子句在这里的作用与它在 CREATE TABLE 中所起的作用类似 



常量定义 



    定义常量的方法与定义变量相同              但是常量的数值是静态的           他们不能改变  在上个 



例子中    fiscal_year 可能是常量 



注  在每一个变量的定义都必须以分号结束 



指针定义 



    指针是 PL/SQL   中的另一种类型的变量  在你通常所认为的变量中保存的是数值                         而 



指针型变量则指向了查询结果中的某一行数据  在查询的结果有多个时                            为了分析数据你 



需要在每个记录之间进行翻阅  在查看 PL/SQL               块中的查询结果时        它使用指针来指向返 



回的每一行  下边是一个在 PL/SQL 语句块中定义指针的例子 



INPUT 



    DECLARE 



     cursor employee_cursor is 



            select  *  from  employees; 



    指针与视图类似  通过在 PROCDURE  部分使用 LOOP              循环    你可以翻阅指针        这 



                                                                      383 


…………………………………………………………Page 384……………………………………………………………

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



项技术曾简要地提到过 



%TYPE 属性 



    %TYPE 可以返回表中给定列的变量属性 除了查看在 PL/SQL  中的数据类型定义代码 



你可以使用%TYPE 来保持在你的块中的代码的一致性 



INPUT 



    DECLARE 



        cursor  employee_cursor  is 



            select  emp_id;  emp_name  from  employees; 



        id_num  employees。emp_id%TYPE; 



        name  employees。emp_name%TYPE; 



分析 



    在这个例子中表中 ID_NUM  变量与 EMP_ID 变量具有相同的数据类型  %TYPE 所定 



义的变量 NAME 具有与 EMPLOYEES  中的 emp_name 具有相同的数据类型 



%ROWTYPE 属性 



    变量不仅限于单一的数值            如果你所定义的变量与一个指针相关联的话                   你可以使用 



%ROWTYPE  属性来声明变量与保证它与游标所在行的类型相同                        在 ORACLE   的词典中 



%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 



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



读完一本书以后要将书合上一样             你应该使用 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的