pl/sql資料型別主要包括標量資料型別和復合資料型別。
標量資料型別比較簡單,不在詳細說明。
復合資料型別主要包括pl/sql記錄、pl/sql表(索引表)、巢狀表和變長陣列(varray)。下邊詳細描述。
pl/sql記錄:pl/sql記錄類似於高階語言中的結構,可以儲存多個字段值,類似於表中的一行資料。當使用記錄變數時,必須先定義記錄的結構,然後定義記錄型別的變數。定義記錄結構的語法:
type type_name is record(
field_name data_type[[not null] value]
示例:自定義pl/sql記錄
declare
type emp_type is record(
empno number(4),
ename varchar2(10),
sal number(7,2)
);one_emp emp_type;
begin
select empno,ename,sal into one_emp
from scott.emp where empno=7900;
dbms_output.put_line('員工編號為:'||one_emp.empno);
dbms_output.put_line('員工姓名為:'||one_emp.ename);
dbms_output.put_line('員工工資為:'||one_emp.sal);
end;
pl/sql記錄的使用方法:在oracle9i以前,如果在內嵌sql語句中使用pl/sql記錄變數,那麼只有select into語句可以直接引用記錄變數,而insert,update和delete語句則只能引用記錄成員。不能直接引用記錄變數。從9i開始,不僅可以在select中直接使用記錄變數,也可以在insert和update語句中直接引用記錄變數。
(1)在select into 中使用pl/sql記錄。既可以使用記錄變數,也可以使用記錄變數成員。
示例一:使用記錄變數
declare
type emp_record_type is record(
name scott.emp.ename%type,
sal scott.emp.sal%type,
dno scott.emp.deptno%type
);emp_record emp_record_type;
begin
select ename,sal,deptno into emp_record
from scott.emp where empno=7900;
dbms_output.put_line(emp_record.name);
dbms_output.put_line(emp_record.sal);
dbms_output.put_line(emp_record.dno);
end;
示例二:使用記錄成員變數
declare
type emp_record_type is record(
name scott.emp.ename%type,
sal scott.emp.sal%type,
dno scott.emp.deptno%type
);emp_record emp_record_type;
begin
select ename,sal,deptno into
emp_record.name,emp_record.sal,emp_record.dno
from scott.emp where empno=7900;
dbms_output.put_line(emp_record.name);
dbms_output.put_line(emp_record.sal);
dbms_output.put_line(emp_record.dno);
end;
(2)在insert 語句中使用pl/sql記錄
示例一:在values子句中使用記錄變數
declare
dept_record scott.dept%rowtype;
begin
dept_record.deptno:=50;
dept_record.dname:='adninistrator';
dept_record.loc:='bj';
insert into scott.dept values dept_record;
end;
示例二:在values子句中使用記錄成員
declare
dept_record scott.dept%rowtype;
begin
dept_record.deptno:=51;
dept_record.dname:='sales';
dept_record.loc:='bj';
insert into scott.dept
values
(dept_record.deptno,dept_record.dname, dept_record.loc);
end;
2. pl/sql表(索引表):pl/sql表也稱索引表,用於處理pl/sql陣列的資料型別。但是索引表與高階語言的陣列是有區別的:高階語言陣列的元素個數是有限制的,並且下標不能為負值;而索引表的元素個數沒有限制,並且下標可以為負值。定義索引表的語法:
type type_name is table of element_type
[not null] index by key_type;
identifier type_name;
其中索引表下標不僅可以使用binary_integer和pls_integer,而且可以使用varchar2。
示例一:在索引表中使用binary_integer和pls_integer
declare
type ename_table_type is table of scott.emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(-1) from scott.emp
where empno=7900;
dbms_output.put_line(ename_table(-1));
end;
3. 巢狀表:也是一種用於處理pl/sql陣列的資料型別。同樣巢狀表和高階語言的陣列也是有區別的:高階語言陣列的元素下標從0或者1開始,並且元素個數是有限制的;而巢狀表的元素下標從1開始,並且元素個數沒有限制;另外,高階語言的陣列元素是有順序的,而巢狀表中的陣列元素可以是無序的。索引包型別不能作為表列的陣列型別使用,但是巢狀表型別是可以作為表列的陣列型別使用的。當使用巢狀表之前,必須首先使用起構造方法初始化巢狀表。定義巢狀表的語法格式:
type type_name is table of element_type;
identifier type_name;
示例一;在pl/sql塊中使用巢狀表
declare
type ename_table_type is table of scott.emp.ename%type;
ename_table ename_table_type;
begin
ename_table:=ename_table_type('mary','lili','tomm');
select ename into ename_table(2) from scott.emp
where empno=7900;
dbms_output.put_line(ename_table(2));
end;
4. 變長陣列(varray):也是一種用於處理pl/sql陣列的資料型別,它也可以作為表列的資料型別使用。該資料型別與高階語言陣列非常相似,起元素下標從1開始,並且元素的最大個數是又限制的。定義語法:
type type_name is varray(size) of element_type [not null];
identifier type_name;
5. pl/sql記錄表:pl/sql變數用於處理單行單列資料,pl/sql記錄用於處理單行多列資料,pl/sql集合使用者處理多行多列資料。為了在pl/sql塊中處理多行多列資料,我們可以使用記錄表。pl/sql記錄表結合了pl/sql記錄和pl/sql集合的優點,從而可以有效處理多行多列的資料。
示例:
declare
type emp_table_type is table of scott.emp%rowtype
index by binary_integer;
emp_table emp_table_type;
begin
select * into emp_table(1) from scott.emp
where empno=7900;
dbms_output.put_line(emp_table(1).ename);
end;
PL SQL資料型別
create or replace procedure pr mytest is v test number 8 變數 v char varchar2 10 c changl constant number 12,3 3.14 常量 v bm t hq ryxx.bumbm type type ty...
PL SQL 三 復合資料型別
一 復合資料型別 存放多個字段,建立後可以多次使用 二 分類 記錄 表 巢狀表 陣列 三 簡介 1 記錄 儲存一組多個欄位的相關資料項,是字段的集合,主要用於從表中取出查詢到的的行資料 特殊的記錄 rowtype 宣告的表量對應資料庫表或檢視中列的集合,獲取的是單條資訊 優點 對應資料庫中列的數量和...
PL SQL 三 復合資料型別
一 復合資料型別 存放多個字段,建立後可以多次使用 二 分類 記錄 表 巢狀表 陣列 三 簡介 1 記錄 儲存一組多個欄位的相關資料項,是字段的集合,主要用於從表中取出查詢到的的行資料 特殊的記錄 rowtype 宣告的表量對應資料庫表或檢視中列的集合,獲取的是單條資訊 優點 對應資料庫中列的數量和...