一、PL/SQL数据类型
数值类型
1、NUMBER 以十进制方式存储,可以表示整数和浮点数,Number最多可达38位(包括小数部分) ,eg : NUMBER(5,2),表示有效位5位,小数点2位, 234.23
2、PLS_INTEGER 和 BINARY_INTEGER 可以认为是同一类型,范围是-2147483648~2147483647 它们的区别是BINARY_INTEGER 发生溢出时能为他指派一个NUMBER类型而不至于发生异常,但PLS_INTEGER 溢出时就会发生异常
3、SIMPLE_INTEGER oracle11g新增的类型,是PLS_INTEGER 的子类型 取值范围和PLS_INTEGER 一样,该类型允许为空。性能高于PLS_INTEGER ,如果数据本身不需要溢出检查 或者不可能为空 ,则可以选择该类型
字符类型
1、CHAR 用来描述固定长度的字符串,当他的值无法达到定义的长度时,会以空格补齐。最长为32767个字节,默认长度为1,改数据类型比起VARCHAR2比较浪费空间,而且可能需要对数据空格进行处理
2、VARCHAR2 用来描述可变长度字符串,作为变量时候最长32767个字节,作为字段存储时最多4000个字节。当他的值未达到定义的长度时候。不会空格补齐,相对节省空间
3、LONG 以可变的方式存储数据。作为变量最长32760个字节,作为存储字段可达2GB
4、NCHAR、NVARCHAR2类型与CHAR, VARCHAR2相同。与字符集有关
布尔类型
不允许定义表中的数据类型。可以用来存储逻辑值。有3个值可选: TRUE , FLASE , NULL
日期类型
DATE 存储月、年、日、世纪、时、分、秒
TIMESTAMP 存储月、年、日、世纪、时、分、秒以及小数的秒
复合类型 使用复合类型必须先定义,然后才能声明该类型的变量
1、记录类型
(1)自定义类型
直接写例子来理解吧
eg:
DECLARE
TYPE readerinfo IS RECORD (TYPE IS RECORD关键字 表示记录类型)
(
v_readerid NUMBER(4),
v_readname VARCHAR2(20),
VARCHAR2(50),
) ;
v_readerinfo readerinfo ;
BEGIN
SELECT READERID, READNAME , UNIT INTO v_readerinfo FROM READERINFO WHERE READERID = 9701;
DBMS_OUTPUT.PUT_LINT( ' v_readerid =' || v_readerinfo.v_readerid);
DBMS_OUTPUT.PUT_LINT( ' v_readname=' || v_readerinfo.v_readname);
DBMS_OUTPUT.PUT_LINT( ' v_unit =' || v_readerinfo.v_unit);
END;
注: 前面表示变量名 后面表示变量类型 即v_readerinfo 为变量名 ,类型为readerinfo
可根据变量名.成员名称获取具体的值
(2)利用%ROWTYPE指明数据类型
这种方式直接引用表中的数据类型作为变量的类型,开发过程中用的较多,并且可以避免表中字段类型更改导致的出错
eg:
DECLARE
v_readerinfo READERINFO%ROWTYPE ;
BEGIN
SELECT READERID, READNAME , UNIT INTO v_readerinfo FROM READERINFO WHERE READERID = 9701;
DBMS_OUTPUT.PUT_LINT( ' v_readerid =' || v_readerinfo.v_readerid);
DBMS_OUTPUT.PUT_LINT( ' v_readname=' || v_readerinfo.v_readname);
DBMS_OUTPUT.PUT_LINT( ' v_unit =' || v_readerinfo.v_unit);
END;
注:READERINFO是数据库表明。后面直接跟上%ROWTYPE,就表示引用数据库表字段类型作为变量的数据类型
取值方式和上面相同,根据变量名.成员名称获取值
2、索引表类型
3、VARRAY变长数组类型
二、流程控制
流程控制无非IF ELSE 循环,这里直接写例子来理解
IF ELSE这里不做详写了,下面介绍下plsql里的3种循环
(1)
declare
v_rlt number(8) := -3;
begin
<<while_loop>> --loop名称 可缺省 ,如果加了 下面end loop后必须加上
while v_rlt < 3
loop
dbms_output.put_line('v_rlt = ' || v_rlt);
if v_rlt > 0
then dbms_output.put_line('v_rlt 大于0 ');
end if;
v_rlt := v_rlt + 1;
end loop while_loop;
dbms_output.put_line('循环结束');
end;
(2)
declare
v number(2,1) := 30.23;
begin
loop
v := v + 1;
dbms_output.put_line('v=' || v);
exit when v > 5;
end loop;
end;
(3)
declare
v_for number(8) := 0;
begin
for v_i in 1..5 loop
v_for := v_for + v_i;
dbms_output.put_line('v_for =' || v_for);
end loop;
end;
今天先写到这,接下去继续写游标。存储过程和函数等
本文介绍了Oracle PL/SQL中的数据类型,包括数值类型(如NUMBER, PLS_INTEGER, VARCHAR2等),字符类型,布尔类型,日期类型以及复合类型。并详细讲解了流程控制,如WHILE循环、无标签循环和FOR循环的使用方法。"
137411019,5076149,新质生产力下软件专业青年的发展机遇与挑战,"['嵌入式硬件', '开发语言', 'c语言', '单片机', '软件开发']
1197

被折叠的 条评论
为什么被折叠?



