天天看點

PL/SQL學習筆記(二)

<b>定義并使用變量</b>

pl/sql有四種類型:标量類型,複合類型,引用類型(reference),lob(large obejct)類型

一.标量類型

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

常量标量類型如下:

PL/SQL學習筆記(二)

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一樣的指派符号@_@

例子:

PL/SQL學習筆記(二)

v_name  varchar2 ( 10 );

PL/SQL學習筆記(二)
PL/SQL學習筆記(二)

v_rate constants  number ( 4 , 2 ) : = 3.04 ;

PL/SQL學習筆記(二)

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

PL/SQL學習筆記(二)

v_name employee.name % type;

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

二。複合變量:

用于存放多個值的變量稱為複合變量,包括pl/sql記錄,pl/sql表,嵌套表和varray四種類型

1。pl/sql記錄

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

PL/SQL學習筆記(二)

declare

PL/SQL學習筆記(二)

   type employee_record  is  record(

PL/SQL學習筆記(二)

     id employee.id % type,

PL/SQL學習筆記(二)

     name employee.name % type,

PL/SQL學習筆記(二)

     email employee.email % type);

PL/SQL學習筆記(二)

   em_record employee_record;

PL/SQL學習筆記(二)

begin

PL/SQL學習筆記(二)

    select  id,name,email  into  em_record  from  employee  where  name =&amp; name;

PL/SQL學習筆記(二)

   dbms_output.put_line( ' 雇員名: ' || em_record.name || '  雇員id: ' || em_record.id);

PL/SQL學習筆記(二)

end ; 

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

PL/SQL學習筆記(二)
PL/SQL學習筆記(二)

   type employee_table  is   table   of  employee.name % type  index   by  binary_integer;

PL/SQL學習筆記(二)

   em_table employee_table;

PL/SQL學習筆記(二)
PL/SQL學習筆記(二)

    select  name  into  em_table( - 1 )  from  employee  where  name =&amp; name;

PL/SQL學習筆記(二)

   dbms_output.put_line( ' 雇員名: ' || em_table( - 1 ));

PL/SQL學習筆記(二)

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

PL/SQL學習筆記(二)

create   or   replace  type emp_type   as  object(

PL/SQL學習筆記(二)

  name  varchar2 ( 10 ),salary  number ( 6 , 2 ),hiredate date);

PL/SQL學習筆記(二)
PL/SQL學習筆記(二)

create   or   replace  type emp_array  is   table   of  emp_type;

PL/SQL學習筆記(二)
PL/SQL學習筆記(二)

  create   table  department(

PL/SQL學習筆記(二)

    deptno  number ( 2 ),dname  varchar2 ( 10 ),

PL/SQL學習筆記(二)

    employee emp_array)nested  table  employee store  as  employee_dept;

PL/SQL學習筆記(二)

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語句的遊标稱為動态遊标,如:

PL/SQL學習筆記(二)

  declare  

PL/SQL學習筆記(二)

     type c1  is  ref  cursor ;

PL/SQL學習筆記(二)

     emp_cursor c1;

PL/SQL學習筆記(二)

     v_name employee.name % type;

PL/SQL學習筆記(二)

     v_sal employee.salary % type;

PL/SQL學習筆記(二)

     begin

PL/SQL學習筆記(二)

      open  emp_cursor  for

PL/SQL學習筆記(二)

        select  name,salary  from  employee ;

PL/SQL學習筆記(二)

     loop

PL/SQL學習筆記(二)

        fetch  emp_cursor  into  v_name,v_sal;

PL/SQL學習筆記(二)

        exit   when  emp_cursor % notfound;

PL/SQL學習筆記(二)

       dbms_output.put_line(v_name);

PL/SQL學習筆記(二)

      end  loop;

PL/SQL學習筆記(二)

      close  emp_cursor;

PL/SQL學習筆記(二)

     end ;  

2。ref object,與java的引用概念相同,存儲的是指向對象的指針

四。lob類型

lob類型是指用于存儲大批量資料的變量,包括内部的3種(clob,blob,nclob)和外部lob(bfile)。

clob,nclob用于存儲大量的字元資料。

blob用于存儲大批量二進制資料(如圖象)。

bfile則存儲指向os檔案的指針。

文章轉自莊周夢蝶  ,原文釋出時間5.17