<b>定義并使用變量</b>
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表允許負值下标,而且沒有上下限,如:
type employee_table is table of employee.name % type index by binary_integer;
em_table employee_table;
select name into em_table( - 1 ) from employee where name =& name;
dbms_output.put_line( ' 雇員名: ' || em_table( - 1 ));
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檔案的指針。
文章轉自莊周夢蝶 ,原文釋出時間5.17