欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > PL/SQL 变量以及数据类型(上篇)

PL/SQL 变量以及数据类型(上篇)

2025/2/13 4:21:54 来源:https://blog.csdn.net/tffovever/article/details/145563413  浏览:    关键词:PL/SQL 变量以及数据类型(上篇)

目录

一、变量

命名规则

命名习惯

二、数据类型

1.标量类型

NUMBER

舍入规则

字符类型

CHAR(n)

VARCHAR2(n)

日期类型

DATE

TIMESTAMP

INTERVAL

布尔类型

2.复合类型

记录类型

表类型

3.引用类型

4.LOB(long object)类型

5.属性类型


 

一、变量

命名规则

长度最大为30,以字母开头,可以包含字母,数字,#,$,_,但不包括空格以及其他特殊字符。

命名习惯

普通变量名 v_name   游标名c_name   等等。

二、数据类型

1.标量类型

数字类型

NUMBER

存储数字,包括整数,小数,正负数和科学计数表示的数。

最大精度是38位,可以指定精度:NUMBER(n,m)(定义一个总位数不超过n,小数位不超过m的数字)。在这里,n 表示精度(总数字位数),而 m 表示标度(小数点后的数字位数)。

DECLAREv_number NUMBER(4,1):= 10.25;--精度与标度不匹配时,有的数据库会报错,有的会舍五进一;
BEGINIF v_number > 9.0 THEN--执行操作;END IF;
END;

NUMBER(n,m):m为负数时, 他表示小数点位置向左平移|m|个位数,也就是扩大了10倍。(负标度用于表示比整数更大的数值范围,而不是小数。)

DECLAREv_number NUMBER(10,-1) := 10;
BEGINDBMS_OUTPUT。PUT_LINE('number:' || v_number);
END;

输出结果

number:100
舍入规则

●如果有效位是正数,在小数点右边的某处产生四舍五入;

SELECT ROUND(1234.1234,2) FROM DUAL;

使用了ROUND函数,并指定了有效位为2(即保留两位小数)。因此,Oracle会在小数点后两位进行四舍五入,结果是123.46

●如果有效位是负数,在小数点左边的某处产生四舍五入;

SELECT ROUND(1234,-2) FROM DUAL;

有效位是-2,表示要对小数点左边第二位进行四舍五入。因此,Oracle会将12345四舍五入到最近的百位数,结果是12300(如果采用标准的四舍五入规则)。这里的-2表示向左移动两位来进行四舍五入。

●如果有效位未指定,四舍五入到最近的整数;(因为如果不指定有效位,ROUND函数通常会默认四舍五入到最接近的整数。)

SELECT 123.4567 FROM DUAL;

 由于未指定有效位,ROUND函数会将数字四舍五入到最接近的整数,结果是123

●如果有效位是零,四舍五入到最近的整数; 

SELECT ROUND(123.4567, 0) FROM DUAL;

 有效位是0,表示要四舍五入到最近的整数。因此,Oracle会将123.4567四舍五入到整数,结果是123(当小数部分小于0.5时)或124(当小数部分大于或等于0.5时)。在这个具体的数字中,由于小数部分是0.4567,小于0.5,所以结果是123

BINARY_INTEGER 和 PLS_INTEGER

存储整数,其中PLS_INTEGER提供了更好的性能。

DECLAREv_int PLS_INTEGER := 1;
BEGINDBMS_OUPUT.PUT_LINE('v_int' || v_int);
END
字符类型
CHAR(n)

固定长度的字符数据。不同于number,不声明长度时就默认定义为一位字符。固定长度,空格右填充。结合RTRIM函数删除变量中的空格。

DECLAREv_char CHAR := '10';
BEGINDBMS_OUTPUT.PUT_LINE('v_char :'|| v_char );v_cahr CHAR(3) := '10';DBMS_OUTPUT.PUT_LINE('v_char :'|| v_char );
END;

 输出结果

v_char : 1--未申明,默认保留一位。
v_char : 10 --此处有一个空格
VARCHAR2(n)

varchar是varchar2的子集,完全兼容varchar2,不建议使用varchar,vachar2变长字符变量

DECLAREv_varchar VARCHAR(10):= '10';
BEGINDBMS_OUTPUT.PUT_LINE('v_varchar :'|| v_varchar );
END;

 输出结果

v_varchar :10--此处无空格
日期类型
DATE

存储内容:DATE类型用于存储日期和时间信息,包括年、月、日、时、分、秒。DATE类型可以存储时间信息,其默认显示可能只包括日期部分(年、月、日)。

精度:DATE类型的精度通常到秒级别,不会包含毫秒或微秒信息。

格式:通常,DATE类型在数据库中的存储格式是固定的,但在查询和显示时,可以通过TO_CHAR函数转换为不同的字符串格式。

DECLAREv_date DATE := SYSDATE;
BEGINDBMS_OUTPUT.PUT_LINE('Date: ' || TO_CHAR(v_date, 'YYYY-MM-DD HH24:MI:SS'));
END;
TIMESTAMP

存储内容TIMESTAMP类型也用于存储日期和时间信息,与DATE类型相似,但它提供了更高的精度。

精度TIMESTAMP可以精确到秒级别,甚至可以到毫秒、微秒级别,具体精度取决于数据库的设置。在Oracle中,TIMESTAMP类型可以存储年、月、日、时、分、秒以及小数秒部分。

时区支持TIMESTAMP类型还可以存储时区偏移量,允许存储相对于特定时区的日期和时间。

格式与转换:与DATE类型类似,TIMESTAMP在数据库中的存储格式是固定的,但可以通过函数进行格式转换以满足不同的显示需求。

INTERVAL

存储内容INTERVAL类型用于存储两个时间戳之间的时间间隔。它可以用来表示一段时间的长度,例如几天、几小时或几分钟等。

种类:Oracle支持两种INTERVAL类型,包括INTERVAL YEAR TO MONTH(使用年份和月份)和INTERVAL DAY TO SECOND(使用天数、小时数、分钟数和秒数存储间隔)。这提供了灵活的时间间隔表示方式。

用途:这种数据类型在进行日期和时间计算时非常有用,比如计算两个日期之间的差异,或者对日期进行加减操作等。

布尔类型

存储Boolean值:TRUE、FALSE、NULL

一个NULL不与其他任何值相等;

一个NULL不与其他任何值不等;

比较操作中存在NULL值,永远不等

比较NULL值, IS NULL, IS NOT NULL

DECLAREv_bloolean BOOLEAN := NULL;
BEGINIF v_boolean = TRUE THENDBMS_OUTPUT.PUT_LINE('Boolean is TRUE');ELSIF v_boolean = FALSE TEHENDBMS_OUTPUT.PUT_LINE('Boolean is FALSE');ELSIF v_boolean is NULL THENDBMS_OUTPUT.PUT_LINE('Boolean is NULL');ELSE DBMS_OUTPUT.PUT_LINE('Boolean is undefined');END IF
END;

输出结果

Boolean is NULL
2.复合类型
记录类型
表类型
3.引用类型

引用类型用于存储对数据库对象的引用。

REF CURSOR:用于存储对游标的引用

4.LOB(long object)类型
5.属性类型

%TYPE:引用表列或已知变量的类型。

%ROWTYPE:引用表的一行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com