PL SQL資料型別(三)

2021-08-31 02:33:45 字數 4651 閱讀 5676

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 宣告的表量對應資料庫表或檢視中列的集合,獲取的是單條資訊 優點 對應資料庫中列的數量和...