| 数据类型 | 说明 |
|---|---|
| NUMBER[(p[,s])] | 用于存储零、正负定点数。精度p是一个无符号整数,定义总的数字数,取值范围:1~38;标度s不应大于其精度。 |
| TINYINT | 用于存储有符号整数,精度为3,标度为0。取值范围:-128~127。 |
| SMALLINT | 用于存储有符号整数,精度为5,标度为0。取值范围:-32768(-215)~327672(215-1)。 |
| INT | 用于存储有符号整数,精度为10,标度为0。取值范围:-2147483648(-231)~2147483647(231-1)。 |
| BIGINT | 用于存储有符号整数,精度为19 ,标度为0。取值范围:-9223372036854775808(-263)~9223372036854775807(263-1)。 |
| 数据类型 | 说明 |
|---|---|
| DOUBLE | 带二进制精度的浮点数,不支持指定精度,直接使用标准C语言中的DOUBLE,取值范围:-1.79*10308~1.79*10308。 |
| 数据类型 | 说明 |
|---|---|
| BOOL | 用于存储布尔类型数据,取值范围:0或1。 |
| 数据类型 | 说明 |
|---|---|
| VARCHAR [(p)] | 字符数据类型,精度p取值范围:1~20000。默认精度为8188。 |
| VARBINARY [(p)] | 二进制数据类型。精度p取值范围:1~20000。默认精度为8188。 |
| 数据类型 | 说明 |
|---|---|
| DATE | DATE类型包括年、月、日信息,定义了'0001-01-01'和'9999-12-31'之间任何一个有效的格里高利日期。 |
| TIME [(p)] | TIME类型包括时、分、秒信息,定义了一个在'00:00:00.000000'和 '23:59:59.999999'之间的有效时间。TIME类型的小数秒精度p规定了秒字段中小数点后面的位数,取值范围:0~6,如果未定义,缺省精度为0。 |
| TIMESTAMP[ (p)] | TIMESTAMP类型包括年、月、日、时、分、秒信息,定义了一个在'0001-01-01 00:00:00.000000'和'9999-12-31 23:59:59.999999'之间的有效格里高利日期时间。TIMESTAMP类型的小数秒精度p规定了秒字段中小数点后面的位数,取值范围:0~6,如果未定义,缺省精度为6。 |
数组的使用分为两步。
定义数组类型。
声明该类型的数组变量。
数组分为静态数组和动态数组两类,其中动态数组需要动态分配空间后才能使用,具体见后文。
语法
--定义静态数组类型
TYPE <数组类型名> IS ARRAY <数据类型>[<数组长度>];
--定义动态数组类型
TYPE <数组类型名> IS ARRAY <数据类型>[];
示例
--定义静态数组类型
TYPE STYPE1 IS ARRAY NUMBER[1000];
TYPE STYPE2 IS ARRAY VARCHAR(128)[1000];
--定义动态数组类型
TYPE DTYPE1 IS ARRAY NUMBER[];
TYPE DTYPE2 IS ARRAY VARCHAR(128)[];
语法
DECLARE
<变量名> <数组类型名>;
BEGIN
...
END;
示例
DECLARE
snum STYPE1;
sstr STYPE2;
dnum DTYPE1;
dstr DTYPE2;
BEGIN
...
END;
说明动态数组变量声明后,需要分配内存空间才能使用。
语法
<变量> := NEW <数据类型名称>[<数组长度>];
示例
dnum := NEW NUMBER[1000];
dstr := NEW VARCHAR[1000];
通过索引直接访问成员。索引从1开始,不得超过数组的长度,表示数组的第几个成员。
<变量名>.SIZE获取数组的大小。
示例
dnum[1] := 1;
DRS_SYS.PUT_LINE('dnum size is: ' || dnum.SIZE);
支持用户基本数据类型的组合,实现自定义类型。
说明允许自定义类型的嵌套。
语法
TYPE <自定义类型名>
DECLARE
...
END;
示例
TYPE MYTYPE
DECLARE
num1 NUMBER(10);
str1 VARCHAR(10);
str2 VARCHAR(10);
END;
TYPE MYTYPE_EX
DECLARE
mt MYTYPE;
num1 NUMBER(10);
END;
DECLARE
mt_ex MYTYPE_EX;
BEGIN
mt_ex.mt.str1 := 'HELLO DRS!';
mt_ex.num1 := 4400;
END;
支持常见的for/while循环,以及break/continue循环控制语句。
语法
FOR <变量> IN <起始值>..<结束值> LOOP
... --BREAK/CONTINUE
END LOOP;
WHILE <条件表达式> LOOP
... --BREAK/CONTINUE
END LOOP;
说明break用于终止跳出循环,continue用于继续下一次循环。仅用于循环体内部。
语法
IF <条件表达式> THEN ...
END IF;
IF <条件表达式> THEN ...
ELSE ...
END IF;
IF <条件表达式> THEN ...
ELSIF <条件表达式> THEN ...
...
ELSE ...
END IF;
支持goto语句用于无条件跳转到指定标签。
说明同一语句块中,标签名唯一。
语法
"<<"<标签名>">>" --双尖括号包含
goto <标签名>;
示例
DECLARE
i INT;
BEGIN
i := 1;
<<again>>
IF i = 100 THEN
RETURN;
END IF;
i := i + 1;
GOTO again;
END;
用于结束当前函数,并返回值。
语法
RETURN [<返回值>];
| 运算符 | 操作描述 |
|---|---|
| +,- | 正、负数标识符 |
| *,/ | 乘、除 |
| +,-,||,:: | 加、减、字符串连接、二进制连接 |
| =,<,>,<=,>=,<>,!= | 比较 |
| NOT | 逻辑否定 |
| AND | 逻辑与 |
| OR | 逻辑或 |
| LIKE,NOT LIKE | 字符串匹配运算 |
文章
阅读量
获赞
