更新时间:2021-03-16 17:25:36 来源:极悦 浏览1377次
我们在编写PL/SQL程序时,可以定义变量和常量。在PL/SQL程序中的变量包括有标量类型(scalar)、复合类型(composite)、参照类型(references)、lob(large object)。下面我们来具体分析PL/SQL变量的使用和定义。
1、标量(scalar)
在编写PL/SQL块时,如果要使用变量,需要在定义部分定义变量。
PL/SQL中定义变量和常量的语法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier:名称
constant:指定常量。需要指定它的初始值,其其值是不能改变的。
datatype:数据类型
not null:指定变量值不能为NULL
:=:给变量或是常量指定初始值
default:用于指定初始值
expr:指定初始值PL/SQL表达式,可是文本值、其他变量、函数等。
标量定义的案例
(1)定义一个变长字符串
v_ename varchar2(10);
(2)定义一个小数,范围-9999.99~9999.99
v_sal number(6,2);
(3)定义一个小数并给一个初始值为5.4 :=是PL/SQL的赋值号
v_sal2 number(6,2):=5.3;
(4)定义一个日期类型的数据
v_hiredate date;
(5)定义一个布尔变量,不能为空,初始值为false
v_valid boolean not null default false;
A、使用标量
在定义好变量后,就可以使用这些变量。这里需要 说明的是PL/SQL块为变量赋值不同于其他的编程语言,需要在等号前面加冒号(:=)。
下面以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)为例,说明变量的使用,看看如何编写。d
eclare
c_tax_rate number(3,2):=0.03;
v_ename varchar2(5);
v_sal number(7,2);
v_tax number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工资是:'||v_sal||' 所得税是:'||v_tax);
end;
B、使用%type类型
对于上面的PL/SQL块有一个问题:
就是如果员工的姓名超过了5字符的话,就会有错误,为了降低PL/SQL程序的维护工作量,可以使用%type属性定义变量,这样它会按照数据库列来确定你定义的变量的类型和长度。
语法:标识符名 表名.列名%type;
案例:
declear
c_tax_rate number(3,2):=0.03;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工资是:'||v_sal||' 所得税是:'||v_tax);
end;
2、复合变量(composite)
用于存储多个值的变量。主要包括这几种PL/SQL记录、PL/SQL表、嵌套表、varray。
1)PL/SQL记录
类似于高级语言中的结构体,需要注意的是,当引用PL/SQL记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)。
案例:
declare
type emp_record_type is record(name emp.ename%type, salary emp.sal%type,title emp.job%type);
sp_record emp_record_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_record.name);
end;
2)PL/SQL表
相当于高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,而PL/SQL是可以为负数的,并且表元素的下标没有限制。
案例:
declare
type sp_table_type is table of emp.ename%type index by binary_integer;
sp_table sp_table_type;
begin
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('员工名:'||sp_table(0));
end;
说明:
sp_table_type:是PL/SQL表类型
emp.ename%type:指定了表的元素的类型和长度
sp_table:是PL/SQL表变量
sp_table(0):表示下标为0的元素
3、参照变量
概述:参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用空间。在编写PL/SQL程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型。
使用游标时,当定义游标时不需要指定相应的select语句,但是当使用游标时(open时)需要指定select语句,这样一个游标就与一个select 语句结合了。
案例:
请使用PL/SQL编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资
declare
type sp_emp_cursor is ref cursor;
test_cursor sp_emp_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type
begin
opent test_cursor for select ename,sal from emp where deptno=&no;
loop
fetch test_cursor into v_ename,v_sal;
exit when test_cursor%notfound
dbms_output.putline('姓名:'||v_ename||' 工资:'||v_sal);
endloop;
close test_cursor;
end;
熟练掌握PL/SQL中的变量使用和定义是我们学习PL/SQL的基本要求之一,这些变量的定义和使用能够有效地帮助我们解决许多开发中遇到的问题,结合本站的PL/SQL教程中的其他内容,我们基本上能够独立完成使用PL/SQL在Oracle数据库中进行一些基本的操作和开发了。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习