当前位置: 首页 > article >正文

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 表示标度(小数点后的数字位数)。

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

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

DECLARE
    v_number NUMBER(10,-1) := 10;
BEGIN
    DBMS_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提供了更好的性能。

DECLARE
    v_int PLS_INTEGER := 1;
BEGIN
    DBMS_OUPUT.PUT_LINE('v_int' || v_int);
END
字符类型
CHAR(n)

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

DECLARE
    v_char CHAR := '10';
BEGIN
    DBMS_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变长字符变量

DECLARE
    v_varchar VARCHAR(10):= '10';
BEGIN
    DBMS_OUTPUT.PUT_LINE('v_varchar :'|| v_varchar );
END;

 输出结果

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

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

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

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

DECLARE
  v_date DATE := SYSDATE;
BEGIN
  DBMS_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

DECLARE
    v_bloolean BOOLEAN := NULL;
BEGIN
    IF v_boolean = TRUE THEN
        DBMS_OUTPUT.PUT_LINE('Boolean is TRUE');
    ELSIF v_boolean = FALSE TEHEN
        DBMS_OUTPUT.PUT_LINE('Boolean is FALSE');
    ELSIF v_boolean is NULL THEN
        DBMS_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:引用表的一行。


http://www.kler.cn/a/545305.html

相关文章:

  • 【React】react-redux+redux-toolkit实现状态管理
  • 基于WebAssembly的后端服务突破:打造高性能、安全的新型微服务架构
  • 27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。
  • Golang 进阶训练营
  • Rocky Linux系统修改网卡全攻略
  • 【清晰教程】本地部署DeepSeek-r1模型
  • C语言插入排序之直接插入排序
  • 【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
  • VS Code 通知中一直显示“Reactivating terminals...”的问题解决
  • 解决 paddle ocr 遇到 CXXABI_1.3.13 not found 的问题
  • JAVA DDD设计模式:用策略模式干掉满屏if-else
  • 吉祥汽车泰国首发,用 Unity 实现行业首创全 3D 座舱虚拟世界
  • 【深度学习】计算机视觉(CV)-目标检测-SSD(Single Shot MultiBox Detector)—— 单次检测多框检测器
  • 了解卷积神经网络(Convolutional Neural Network,CNN)
  • React组件重新渲染机制
  • App UI自动化--Appium学习--第二篇
  • 【Elasticsearch】标准化器(Normalizers)
  • Excel文件的读取
  • 【工业场景】用YOLOv8实现火灾识别
  • Windows软件自动化利器:pywinauto python