一) 概述:
oracle在标准sql语言上进行过程性扩展后形成的程序设计语言,是一种oracle特有的,支持应用开发的语言。
二) 语法:
1.基本结构
declare
--声明一些变量、常量、用户定义的数据类型以及游标等
--这一部分可选,如不需要可以不写
begin
--主程序体
exception
--异常处理
end;
/
2.字符集
1)大小写字母
2)数字
3)非显示的字符、制表符、空格和回车
4)数学符号+,-,*,/,<,>,=。
5)间隔符,包括(),{},[],?,!,;,:,",'@,#,%,$,^,&等;
3.数据类型
1)数字类型
NUMBER(P,S),可存储整数和浮点数;P是有效数字个数,S是小数点右边数字的个数;
PLS_INTEGER
BINARY_INTEGER
后两种只能存储整数
与number等价的子类型:DEC、DECIMAL、DOUBLE、PRECISION、INTEGER、INT、NUMERIC、REAL、SMALLINT...
2)字符类型
VARCHAR2:存储变长字符串,VARCHAR2(maxlength)32767字节,数据库中该类型最大长度为4000字节;
CHAR:存储定长字符串,CHAR(maxlength) 32767字节,数据库中该类型最大长度为2000字节
LONG:存储变长字符串,最大长度为32760字节,数据库中该类型最大长度为2GB
NCHAR
NVARCHAR2
后两种类型的长度根据各国字符集的不同而不同;
3)日期类型
DATA,7字节,世纪、年、月、天、小时、分钟和秒;
4)布尔类型
BOOLEAN
5)type定义的数据类型(记录)
TYPE type_name IS RECORD(
variable_name datatype[,
variable_name datatype[,
...
);
real_name type_name;
记录示例:emp.eid%TYPE
DECLARE
TYPE myrecord IS RECORD(
id varchar2<10>,
name varchar2<10>
);
real_record myrecord;
BEGIN
SELECT eid,ename INTO real_record FROM emp WHERE eid='001';
DBMS_OUTPUT.PUT_LINE(real_record.id||','||real_reacord.name);
END;
DECLARE
TYPE myrecord IS RECORD(
id emp.eid%TYPE,
name varchar2<10>
);
real_record myrecord;
BEGIN
SELECT eid,ename INTO real_record FROM emp WHERE eid='001';
DBMS_OUTPUT.PUT_LINE(real_record.id||','||real_reacord.name);
END;
DECLARE
myrec emp%ROWTYPE
BEGIN
SELECT * INTO myrec FROM emp WHERE eid='001';
DBMS_OUTPUT.PUT_LINE( myrec.eid||','|| myrec.ename);
END
4.控制结构
1)IF语句
IF 条件表达式1 THEN
语句序列1;
[ELSIF条件表达式2THEN
语句序列2;]
[ELSE
语句序列3;]
END IF;
2)CASE语句
CASE 检测表达式
WHEN 表达式1 THEN 语句序列1
......
WHEN 表达式n THEN 语句序列n
[ELSE 其他语句序列]
END;
3)NULL值检查
4)循环结构
LOOP...EXIT...END
control_var:=0;
LOOP
IF control_var>5 THEN
EXIT;
END IF;
control_var:=control_var+1;
END LOOP;
LOOP ... EXIT WHEN ...END
control_var:=0;
LOOP
EXIT WHENcontrol_var>5
control_var:=control_var+1;
END LOOP;
WHILE...LOOP...END
control_var:=0;
WHILEcontrol_var<=5 LOOP
control_var:=control_val+1;
END LOOP;
FOR...IN...LOOP...END
FRO control_var in 0...5 LOOP
NULL;
END LOOP;
GOTO lable;
...
<<mark>>
...
IF no>98050 THEN
GOTO goto_mark;
...
5.表达式
1)字符表达式
'hello'||' world'||'!'=hello world!
2)布尔表达式
AND
OR
NOT