莊周夢蝶

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

          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文件的指針。

          主站蜘蛛池模板: 南乐县| 丹寨县| 宜黄县| 神池县| 仙居县| 裕民县| 蚌埠市| 纳雍县| 正蓝旗| 五莲县| 开江县| 宝丰县| 合山市| 红安县| 茌平县| 筠连县| 阳新县| 英德市| 兰考县| 遂川县| 抚宁县| 吴堡县| 淄博市| 兴城市| 加查县| 屯昌县| 曲阜市| 阿鲁科尔沁旗| 隆尧县| 桐梓县| 临江市| 桃江县| 阿图什市| 吉首市| 大邑县| 克拉玛依市| 枞阳县| 上蔡县| 遵义市| 广安市| 雅安市|