閱讀918 返回首頁    go 阿裏雲 go 技術社區[雲棲]


PL/SQL學習筆記(二)

定義並使用變量

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

一.標量類型

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

常量標量類型如下:

 

None.gifVARCHAR2 (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一樣的賦值符號@_@

例子:

 

None.gifv_name  VARCHAR2 ( 10 );
None.gif
None.gifv_rate CONSTANTS 
NUMBER ( 4 , 2 ) : = 3.04 ;
None.gif

 

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

 

None.gifv_name employee.name % TYPE;

 

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

二。複合變量:

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

1。PL/SQL記錄

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

 

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

 

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

 

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

 

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

 

None.gifcreate   or   replace  TYPE emp_type   as  OBJECT(
None.gif  name 
VARCHAR2 ( 10 ),salary  NUMBER ( 6 , 2 ),hiredate DATE);
None.gif
None.gif
CREATE   OR   REPLACE  TYPE emp_array  IS   TABLE   OF  emp_type;
None.gif
None.gif 
CREATE   TABLE  department(
None.gif    deptno 
NUMBER ( 2 ),dname  VARCHAR2 ( 10 ),
None.gif    employee emp_array)NESTED 
TABLE  employee STORE  as  employee_dept;
None.gif

 

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

 

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

  

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

 

四。LOB類型

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

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

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

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

文章轉自莊周夢蝶  ,原文發布時間5.17

最後更新:2017-05-17 11:32:31

  上一篇:go  D-News | “雲計算與大數據”重點專項2017年度第二次總體專家組會議在京召開
  下一篇:go  那些年,任天堂發布的遊戲機們