PLSQL语法
- 格式:pdf
- 大小:422.13 KB
- 文档页数:6
PLSQL语法
Procedural Language和SQL的结合体。通过增加变量、控制语句,使我们可以写些逻辑更加复杂的数据库操作
语句框架组成
declare – 可选
声明各种变量或游标的地⽅。begin – 必要
开始执⾏语句。--单⾏注释语句⽤两个连在⼀起的‘-’表⽰。
/*多⾏注释语句,
可以换⾏*/exception – 可选
出错后的处理。end; – 必要(请注意end后⾯的分号)
简单helloworld程序
1 declare
2 v_temp number(6):=123; /* := 是⼀个赋值符号 */
3 begin
4 dbms_output.put_line('middle');
5 dbms_output.put_line(v_temp);
6 end;
注意
要想显⽰程序的东西需要设置环境
set serveroutput off -->关闭输出(默认关闭)
set serveroutput on -->打开输出基本数据类型
Number 数字型
Int 整数型
Pls_integer 整数型,产⽣溢出时出现错误
Binary_integer 整数型,表⽰带符号的整数
Char 定长字符型,最⼤255个字符
Varchar2 变长字符型,最⼤2000个字符
Long 变长字符型,最长2GB
Date ⽇期型
Boolean 布尔型(TRUE、FALSE、NULL三者取⼀)
%type 表⽰不需要知道具体的⼀个字段类型,与指定的字段类型⼀致即可。例如:v_empno emp.empno%type;
%rowtype 与表结构完全⼀致 %rowtype 举例:
1 declare
2 v_tt emp%rowtype;
3 begin
4 select * into v_tt from emp where empno=7521;
5 dbms_output.put_line(v_tt.job);
6 dbms_output.put_line(v_tt.sal);
7 end;
8
9 输出:SALESMAN
10 1250
varray
定义语法
TYPE VARRAYNAMEIS VARRAY(SIZE) OF ELEMENTTYPE [NOT NULL];
其中,varrayname是VARRAY数据类型的名称,size是正整数,表⽰可以容纳的成员的最⼤数量,每个成员的数据类型是
elementtypeo默认时,成员可以取空值,否则需要使⽤NOT NULL加以限制。
数组是具有相同数据类型的⼀组成员的集合。每个成员都有⼀个唯⼀的下标,它取决于成员在数组中的位置。在PL/SQL中,数
组数据类型是VARRAY(variable array,即可变数组)。
1 declare
2 type my_varray is varray(2) of varchar2(12) not null;
3 varray_my my_varray;
4 begin5 varray_my:=my_varray('dsa','sdafds');
6 dbms_output.put_line(varray_my(1));
7 end;
如果初始化数量⼤于设定的⼤⼩,会报下标超出限制异常
如果初始化数量⼩于设定的⼤⼩,会按照初始化数量进⾏设定⼤⼩,访问不存在数据的下标(即使在设定范围内).也会报异常
1 DECLARE
2 --定义⼀个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型
3 TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25);
4 --声明⼀个该VARRAY数据类型的变量
5 v_reg_varray REG_VARRAY_TYPE;
6 BEGIN
7 --⽤构造函数语法赋予初值
8 v_reg_varray := reg_varray_type
9 ('中国', '美国', '英国', '⽇本', '法国');
10 DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、'
11 ||v_reg_varray(2)||'、'
12 ||v_reg_varray(3)||'、'
13 ||v_reg_varray(4));
14 DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5));
15 --⽤构造函数语法赋予初值后就可以这样对成员赋值
16 v_reg_varray(5) := '法国';
17 DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5));
18 END;table
定义记录表(或索引表)数据类型。它与记录类型相似,但它是对记录类型的扩展。它可以处理多⾏记录,类似于C语⾔中的⼆
维数组,使得可以在PL/SQL中模仿数据库中的表。
定义记录表类型的语法如下:
TYPE TABLE NAME IS TABLE OF ELEMENT_TYPE [NOT NULL] INDEX BY [BINARYINTEGER|LSINTEGER|VARRAY2];
关键字INDEX BY表⽰创建⼀个主键索引,以便引⽤记录表变量中的特定⾏。 BINARY_INTEGER的说明
如语句:TYPE NUMBERS IS TABLE OF NUMBER INDEX BY BINARYINTEGER;其作⽤是,加”INDEX BYBINARYINTEGER
”后,NUMBERS类型的下标就是⾃增长,NUMBERS类型在插⼊元素时,不需要初始化,不需要每次EXTEND增加⼀个空间。
⽽如果没有这句话“INDEXBY BINARY_INTEGER”,那就得要显⽰对初始化,且每插⼊⼀个元素到NUMBERS类型的TABLE中
时,都需要先EXTEND。
1 --table 不能像varray⼀样初始化数据,只能⼀个⼀个赋值
2 declare
3 type table_my is table of number not null index by binary_integer;-- by binary_integer表⽰创建⼀个主键索引,以便引⽤记录表变量中的特定⾏。
4 my_table table_my;
5 begin
6 my_table(1):=23;
7 my_table(2):=24;
8 my_table(3):=24;
9 dbms_output.put_line(my_table(1));
10 end;
11
12 结果: 23
13
14
15 ---table结合rowtype的使⽤
16 declare
17 type table_my is table of emp%rowtype index by binary_integer;
18
19 my_table table_my;
20 begin
21 select * BULK COLLECT into my_table from emp ;
22 for i in my_table.first..my_table.last loop
23 dbms_output.put_line(my_table(i).empno||'=='||my_table(i).ename||'=='||my_table(i).job);
24 end loop;
25 end;
26
27 结果:1357==oracle==
28 7369==SMITH==CLERK
29 7499==ALLEN==SALESMAN
30 ...
table常见⽅法record
定义记录数据类型。它类似于C语⾔中的结构数据类型(STRUCTURE),PL/SQL提供了将⼏个相关的、分离的、基本数据类型的
变量组成⼀个整体的⽅法,即RECORD复合数据类型。在使⽤记录数据类型变量时,需要在声明部分先定义记录的组成、记录
的变量,然后在执⾏部分引⽤该记录变量本⾝或其中的成员。
定义记录数据类型的语法如下:
TYPE RECORDNAME IS RECORD(
V1 DATATYPE1 [NOT NULL][:=DEFAULTVALUE],
V2 DATATYPE2 [NOT NULL][:=DEFAULTVALUE],
VN DATATYPEN [NOT NULL][:=DEFAULT_VALUE]
);
1 ---record实现多列多⾏查询
2 declare
3 type my_record is record(
4 v_empno emp.empno%type,
5 v_ename emp.ename%type,
6 v_job emp.job%type
7 );
8 type my_table is table of my_record index by binary_integer;
9 table_my my_table;
10 begin
11 select empno,ename,job BULK COLLECT into table_my from emp ;
12 for i in table_my.first..table_my.last loop
13 dbms_output.put_line(table_my(i).v_empno||'=='||table_my(i).v_ename||'=='||table_my(i).v_job);
14 end loop;
15 end;
16 结果同上⼀个tableboolean
布尔值只有TRUE, FALSE及 NULL 三个值
单⾏取值select
语法格式
select 字段 into 变量 from 表 where 条件
1. 将查询到得数据放⼊变量中
2. 确保必须有唯⼀⼀个字段
3. 不能存在多个值,也不能为空,否则报错