常量:声明时指定初始值,且值不能改变
定义方式:
constant_name constant datatype :=value;
常量名 constant(保留字 数据类型 := 赋值;
declare
salary_rate constant number(7,2) :=0.25;--定义加薪常量值
salary number(7,2);
begin
select emp_salary*(1+salary_rate) into salary from emp where emp_id = '8000';
--输出
dbms_output.put_line('加薪后薪水'||salary);
end;
静态:类型在编译时检查
pl/sql 类型大致分为4类:
1。标量类型:存单个值 字符型、数字型、布尔型、日期型
2.复合类型:可包含多个标量类型 记录、嵌套表、索引表、变长数组
3.引用类型:指针 ref、cursor
4.lob类型:大对象类型 处理二进制和>4GB 的字符串
字符型类型:
char:定长字符类型 oracle<2000字节
long:存变长字符串 <32KB
long raw :存二进制数据 <32kB
nchar:存定长unicode数据 如双字节汉字
nvarchar2:存变长unicode数据
raw:存定长二进制数据 <32767个byte
rowid:物理行id,即表中数据行数
urowid:逻辑、物理行ID
varchar :ansi标准sql类型
varchar2:字符集 oracle <4KB
char VS byte
char:以字符为单位 一个字符可包含多个字节 默认值是1 赋值长度比定义小后面自动补白
byte:以字节为单位
declare
name char(2 byte);
name2 char(2 char);
name3 char;
name4 char(20);
begin
name :='ab';--赋值为‘中国’则会报错:字符缓冲区太小
name2 :='熊猫';
name3:=1;
name4 :='hello panda';
dbms_output.put_line(length(name4));--name4长度为20 不足的位置补上空白字符
end;
varchar2 两个子类型:String varchar
存值范围:1~32767(32KB)
数据库中数据类型最大为: 4000字节。
declare
name varchar2(25);
name2 varchar2(25 byte);
name3 varchar2(25 char);
begin
name :='中华人民共和国';
dbms_output.put_line(length(name));--7
name2:='中华人民共和国';
dbms_output.put_line(length(name2));--7个字节
end;
number 整数、浮点数
number(精度m,刻度n):数字总长度m\小数n位
declare
num1 number:=3.1415926;--3.1415926
num2 number(3):=3.1415926;--3 没有小数
--num3 number(4,3):=3145.1415926; --报错:精度太高
num4 number(4,3):=3.1415926; --3.142 一共四位 3位小数
num5 number(8,3):=31415.9267; --31415.927
num6 number(4,-3):=33333.333; --33000 从小数点向左清楚3位
num7 number(4,-3):=333.333;--0
num8 number(4,-1):=333;--330
num9 number(4,-1):=31415926;--报错 精度太高
begin
dbms_output.put_line(num1);
dbms_output.put_line(num2);
-- dbms_output.put_line(num3);
dbms_output.put_line(num4);
dbms_output.put_line(num5);
dbms_output.put_line(num6);
dbms_output.put_line(num7);
dbms_output.put_line(num8);
dbms_output.put_line(num9);
end;