变量
变量
Plsql编程中常见的变量分为两大类:
\1. 普通数据类型(char,varchar2,date,number,boolean,long)
\2. 特殊变量类型(引用型变量,记录型变量)
声明变量的方式为:
变量名 变量类型(变量长度) 例如:v_name varchar2(20)
普通变量
变量赋值的方式有两种:
\1. 直接赋值语句 := 比如: v_name :=’zhangsan’
\2. 语句赋值,使用select ...into...赋值:(语法 select 值 into 变量)
示例:打印人员个人信息,包括:姓名,薪水,地址
-- Created on 2020/12/12 by zyq
declare
-- Local variables here
--姓名
v_name varchar2(20) :='zhangsan';
--薪水
v_sal number;
--地址
v_addr varchar2(200);
begin
-- Test statements here
--直接赋值
v_sal :=1580;
--语句赋值
select '北京市通州区' into v_addr from dual;
--打印输出
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||',地址:'||v_addr);
end;
执行输出结果:
姓名:zhangsan,薪水:1580,地址:北京市通州区
引用型变量
变量的类型和长度取决于表中字段的类型和长度
通过表名.列名%type指定变量的类型和长度,例如:v_name emp.ename%type;
[示例]查询emp表中的7839号员工的个人信息,打印姓名和薪水
使用普通变量的方式:
-- Created on 2020/12/12 by zyq
declare
-- Local variables here
--姓名
v_name varchar2(20) :='zhangsan';
--薪水
v_sal number;
begin
-- Test statements here
SELECT a.ename,a.sal into v_name,v_sal FROM emp a WHERE a.empno='7839';
**--打印输出**
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;
使用引用型变量的方式:
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;
使用引用型变量的方式:
-- Created on 2020/12/12 by zyq
declare
-- Local variables here
--姓名
v_name emp.ename%type;
--薪水
v_sal emp.sal%type;
begin
-- Test statements here
SELECT a.ename,a.sal into v_name,v_sal FROM emp a WHERE a.empno='7839';
--打印输出
dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
end;
引用型变量的好处:
使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑列的类型,使用%type是非常好的编程风格,因为他是的plsql更加灵活,更加适应于对数据库定义的更新。
记录型变量
解释:记录型变量,就是将整个表中的一行记录的所有字段同时声明出来。
-- Created on 2020/12/12 by zyq
declare
-- Local variables here
--记录型变量
v_emp emp%rowtype;
begin
-- Test statements here
SELECT * into v_emp FROM emp a WHERE a.empno='7839';
--打印输出
dbms_output.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal);
end;
如果有一个表,有100个字段,那么你程序中如果要使用这100个字段的话,如果你使用引用型变量一个个声明,会特别的麻烦,记录型变量可以方便的解决这个问题
错误的使用:
\1. 记录型变量只能存储一个完整的行数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY