莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          PL/SQL學習筆記(二)

          Posted on 2007-02-11 19:55 dennis 閱讀(1614) 評論(0)  編輯  收藏 所屬分類: 數據庫技術

          定義并使用變量

          PL/SQL有四種類型:標量類型,復合類型,引用類型(reference),LOB(Large Obejct)類型

          一.標量類型

          最常用的就是標量類型,是指只能存放單個數值的變量,包括數字類型、字符類型、日期類型和布爾類型,每種類型又包含相應的子類型。

          常量標量類型如下:

          ?

          VARCHAR2 (n)?, CHAR (n), NUMBER (p,s),DATE, TIMESTAMP , LONG , LONG ? RAW ,BOOLEAN,BINARY_INTEGER(僅PL / SQL使用),BINARY_FLOAT和BINARY_DOUBLE(10g新引入的)

          ?

          定義標量:

          identifier [CONSTANT] datatype [NOT NULL] [:=| DEFAULT expr]

          使用標量需要注意的是=號被:=取代,與delphi一樣的賦值符號@_@

          例子:

          ?

          v_name? VARCHAR2 ( 10 );

          v_rate?CONSTANTS?
          NUMBER ( 4 , 2 )?: = 3.04 ;

          ?

          為了防止定義的變量類型與表中的字段類型不一致,可以使用%TYPE來定義:

          ?

          v_name?employee.name % TYPE;

          ?

          如上面所示,v_name的類型就與表employee中的name字段類型一樣!!

          二。復合變量:

          用于存放多個值的變量稱為復合變量,包括PL/SQL記錄,PL/SQL表,嵌套表和VARRAY四種類型

          1。PL/SQL記錄

          類似于C/C++中的結構概念:

          ?

          declare
          ???TYPE?employee_record?
          is ?RECORD(
          ?????id?employee.id
          % TYPE,
          ?????name?employee.name
          % TYPE,
          ?????email?employee.email
          % TYPE);
          ???em_record?employee_record;
          begin
          ???
          select ?id,name,email? into ?em_record? from ?employee? where ?name =& name;
          ???dbms_output.put_line(
          ' 雇員名: ' || em_record.name || ' ?雇員ID: ' || em_record.id);
          end ;?

          ?

          2。PL/SQL表,類似于數組概念,不同的是PL/SQL表允許負值下標,而且沒有上下限,如:

          ?

          declare
          ???TYPE?employee_table?
          is ? table ? of ?employee.name % TYPE? index ? by ?BINaRY_INTEGER;
          ???em_table?employee_table;
          begin
          ???
          select ?name? into ?em_table( - 1 )? from ?employee? where ?name =& name;
          ???dbms_output.put_line(
          ' 雇員名: ' || em_table( - 1 ));
          end ;?

          ?

          3。嵌套表,與PL/SQL表相似,不同的是嵌套表可以做表列的數據類型,而PL/SQL表不能,使用嵌套表作為表列時,必須為其指定專門的存儲表,如:

          ?

          create ? or ? replace ?TYPE?emp_type?? as ?OBJECT(
          ??name?
          VARCHAR2 ( 10 ),salary? NUMBER ( 6 , 2 ),hiredate?DATE);

          CREATE ? OR ? REPLACE ?TYPE?emp_array? IS ? TABLE ? OF ?emp_type;

          ?
          CREATE ? TABLE ?department(
          ????deptno?
          NUMBER ( 2 ),dname? VARCHAR2 ( 10 ),
          ????employee?emp_array)NESTED?
          TABLE ?employee?STORE? as ?employee_dept;

          ?

          4。VARRAY(變長數組),與嵌套表相似,也可以做為表列的數據類型,但是嵌套表沒有個數限制,而VARRAY有個數限制,如:

          CREATE TYPE TEST_ARRAY IS VARRAY(20) OF emp_type;

          三。引用變量(reference)

          類似于C++中的指針或者JAVA中引用的概念,用于存放數值指針的變量,使用此變量,可以使得應用程序共享相同對象,降低占用空間。此類有兩種類型:游標(REF CURSOR)和對象類型(REF OBJECT)

          1。REF CURSOR,定義時同時指定SELECT語句的游標稱為顯式或者靜態游標,在打開時才指定SELECT語句的游標稱為動態游標,如:

          ?

          ? DECLARE ?
          ?????TYPE?c1?
          IS ?REF? CURSOR ;
          ?????emp_cursor?c1;
          ?????v_name?employee.name
          % TYPE;
          ?????v_sal?employee.salary
          % TYPE;
          ????
          begin
          ?????
          open ?emp_cursor? for
          ???????
          SELECT ?name,salary? FROM ?EMPLOYEE?;
          ?????LOOP
          ???????
          FETCH ?emp_cursor? INTO ?v_name,v_sal;
          ???????
          EXIT ? WHEN ?emp_cursor % NOTFOUND;
          ???????dbms_output.put_line(v_name);
          ?????
          END ?LOOP;
          ?????
          close ?emp_cursor;
          ????
          end ;??

          ??

          2。REF OBJECT,與JAVA的引用概念相同,存儲的是指向對象的指針

          ?

          四。LOB類型

          LOB類型是指用于存儲大批量數據的變量,包括內部的3種(CLOB,BLOB,NCLOB)和外部LOB(BFILE)。

          CLOB,NCLOB用于存儲大量的字符數據。

          BLOB用于存儲大批量二進制數據(如圖象)。

          BFILE則存儲指向OS文件的指針。

          主站蜘蛛池模板: 隆回县| 葫芦岛市| 平南县| 洪洞县| 湟中县| 张家港市| 阿坝| 五大连池市| 武邑县| 石狮市| 福建省| 盐津县| 石首市| 平顶山市| 萨嘎县| 壤塘县| 湛江市| 夏邑县| 镇赉县| 喀喇| 富宁县| 靖江市| 兴海县| 吉安市| 元谋县| 桐城市| 华蓥市| 高邮市| 化隆| 泰宁县| 梓潼县| 格尔木市| 金坛市| 遂溪县| 安龙县| 什邡市| 丰都县| 措勤县| 江孜县| 岐山县| 天峻县|