定义变量的数据类型
数据类型 | 子类型 | ||
---|---|---|---|
纯量类型 | 数值 | BINARY_INTEGER | NATURAL,POSITIVE |
纯量类型 | 数值 | NUMBER | DEC,DECIMAL,DOUBLE,PRECISIONPLOAT,INTEGER,INT,NUMERIC,REAL,SMALLINT |
纯量类型 | 字符 | CHAR | CHARACTER,STRING |
纯量类型 | 字符 | VARCHAR2 | VARCHAR |
纯量类型 | 字符 | LONG | |
纯量类型 | 字符 | LONG RWA | |
纯量类型 | 字符 | RAW | |
纯量类型 | 字符 | RAWID | |
纯量类型 | 逻辑 | BOOLEAN | |
纯量类型 | 日期 | DATE | |
组合类型 | 记录 | RECORD | |
组合类型 | 表 | TABLE | |
数据类型说明
类型标识符 | 说明 |
---|---|
NUMBER | 数值型 |
INT | 整数型 |
BINARY_INTEGER | 整数型带符号 |
char | 定长字符型,最大32767个字符 |
varchar2 | 变长字符型,最大32767个字符 |
LONG | 变长字符型,最长2GB |
DATE | 日期型,用于存储日期和时间 |
BOOLEAN | 布尔型,用于存储逻辑true和false |
LOB | 大对象类型,用来存储非结构化数据,长度达4G |
LOB数据类型可以存储视频,音频或图片支持随机访问,存储的数据可以位于数据库内或数据库外,具体由四种类型:BFILE,BLOB,CLOB,NCLOB。但是操作大对象需要oracle提供的DBMS_LOB包。
定义变量
变量定义,变量的作用是用来存储数据,可以在过程语句中使用。变量在声明部分可以进行初始化,及赋予初值。变量在定义的同时也可以将其说明成常量并赋予固定值。变量的命名规则:以字母开头,后跟其他的字符序列,字符序列中可以包含字母,数值,下划线等符号,最大长度为30个字符,不区分大小写。不能使用Oracle的保留字作为变量名。变量名不要和在程序中引用的字段名相重,如果相重,变量名会被当做列名来使用。
变量的作用范围是在定义此变量的程序范围内,如果程序中包含子块,则变量在子块中也有效。但在子块中定义的变量,仅在定义变量的子块中有效,在主程序中无效。
-
根据数据库提供的类型简单变量的定义方法:
--变量名 [CONSTANT] 类型标识符 [NOT NULL]=值[DEFAULT 值];
关键字CONSTANT用来说明定义的变量是常量,如果是常量,必须有赋值部分进行赋值。
关键字NOTNULL用来说明变量不能为空
declare
idcard constand number not null:=511602;
name varchar2(20) default '张三';
birthday date :=sysdate-7;
sexs boolean default true;
begin
dbms_output.putline('姓名:'||name);
dbms_output.putline('生份卡:'||idcard);
dbms_output.putline('生日:'||birthday);
if(sexs)
then
dbms_output.putline('性别:男')
else
dbums_output.putline('性别:女')
end if;
end;
-
根据表的字段定义变量
变量的声明还可以根据数据库表的字段进行定义或根据已经定义的变量进行定义。方法是在表的字段名或已经定义的变量名后加%type,将其当作数据类型。定义字段变量的方法如下:
变量名 表名.字段名%type;
-
记录变量的定义
可以根据表或视图的一个记录中的所有字段定义变量,称为记录变量。记录变量包含若干歌字段,在结构上同表的一个记录相同,定义方法是表名后跟%rowtype。记录变量的字段名就是表的字段名,数据类型也一致。定义方法是:
记录变量名 表名%rowtype;
--获得记录变量的字段方法:记录变量名.字段名--eg1
declare
v_record_emp emp%rowtype;
begin
select * into v_record_emp from emp where emp.empno='001';
--- 注意不能写成: select emp.empno,emp.empname,emp.empsal into v_record_emp from emp where emp.empno='001';
---会报值过多,只能是*
dbms_output.putline('员工编号:'||record_emp.empno);
dbms_output.putline('员工名称:'||record_emp.empname);
dbms_output.putline('员工薪资:'||record_emp.empsal);
end; -
table类型的变量 ,相当于集合变量
type 类型名 is table of 数据类型 [not null] index by binary_integer;
declare
type emplist is table of varchar2(20) [not null] index by binary_integer;--自定义数据类型
v_emp emplist;---引用变量
begin
select empno into v_emp(-1) from emp where empno='001';
select empno into v_emp(0) from emp where empno='002';
select empno into v_emp(1) from emp where empno='003';
dbms_output.putline('编号为001的同学:'||v_empno(-1));
dbms_output.putline('编号为002的同学:'||v_empno(0));
dbms_output.putline('编号为003的同学:'||v_empno(1));
end; -
定义结合变量(相当于全局变量)
--步骤1
VARIABLE g_name varchar2(100);
--步骤2
set serveroutput on
begin
:g_name:=:g_name||'hello';
--在程序中使用结合变量
dbms_output.putline(:g_name);
--
end;
---执行一次 结果hello
---执行二次 结果hellohello
---....仅当前窗口有效。 -
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!