常量(constant)
--在一个变化过程中,此量的数值始终是不变的,我们称它为常量。它们可以是不随时间变化的某些量和信息,也可以是表示某一数值的字符或字符串,常被用来标识、
测量和比较。
变量(variable)
--是指没有固定的值,可以改变的数。变量以非数字的符号来表达,一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。如果只能使用真实
的值,指令只能应用于某些情况下。变量能够作为某特定种类的值中任何一个的保留器。
计算机中的变量
--是一段有名字的连续存储空间。在源代码中通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。
--变量是程序中数据的临时存放场所。在代码中可以只使用一个变量,也可以使用多个变量, 变量在内存中的存储.变量中可以存放单词、数值、日期以及属性。由于变
量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此它们十分有用。
定义并使用变量
编写PL/SQL程序时,若临时存储数值,必需要定义变量和常量,若在应用环境和子程序之间传递数据,必需要为子程序指定参数.
在PL/SQL 程序中定义变量,常量和参数时,则必需要为它们指定PL/SQL数据类型.
在编写PL/SQL程序时,可以使用标量(scalar)类型,复合(composite)类型,参照(reference)类型和LOB(large object--大对象)类型 等四种类型
标量变量
--指只能存放单个数值的变量.最常用的变量就是标量变量.当定义标量变量时,必需要指定标量数据类型.标量数据类型包括数字,字符,日期和布尔类型,每种类型又包含有
相应的子类型,如number类型包含有integer(整数),positive(正数)等子类型
布尔类型 - 布尔类型对象可以被赋予值 true 或者 false,所对应的关系就是真与假
1-常用标量类型
varchar2(n)
用于定义可变长度的字符串,其中n用于指定字符串的最大长度,最大值为32767字节.在PL/SQL块中其值长度不应该超过4000字节.
char(n)
用于定义固定长度的字符串,其中n用于指定字符串的最大长度,最大值为32767字节,默认值为1,在PL/SQL块中其值长度不应该超过2000字节.
number(p,s)
用于定义固定长度的整数和浮点数,其中p表示精度,指定数字的总位数;s表示标度,用于指定小数点后的数字位数.如:定义变量number(6,2)整数位数最大是4位,小数部分最
大是2位
date
用于定义日期和时间数据,且数据长度为固定长度(7字节).但注意,当给date变量赋值时,数据必需要与日期格式和日期语言匹配.
timestamp
是oracle9i新增加的数据类型,用于定义日期和时间数据.当显示timestamp变量数据时,不仅会显示日期,而且还会显示时间和上下午标记.
long和long raw
long用于定义变长字符串,类似与varchar2,但其字符串的对打长度为32760字节;long raw用于定义变长的二进制数据,最大长度为32760字节
boolean
用于定义布尔变量,其变量值为TRUE,FALSE或NULL.该数据类型是PL/SQL数据类型,表列不能采用该数据类型
binary_integer
该数据类型用于定义整数,其数值范围在-2147473647和2147473647之间.该数据类型是PL/SQL数据类型,表列不能采用该数据类型
binary_float和binary_double
是10g新增加的数据类型,分别用于定义单精度的浮点数和双精度的浮点数.这两种数据类型主要用于高速的科学计算,当为binary_float赋值时,应带有后缀f(如:1.5f),当
为binary_double赋值时,应带有后缀d(如:2.00095d).
定义标量变量
如果要引用标量变量,必需首先在定义部分定义标量变量,然后才能在执行部分或例外处理部分中使用这些标量变量
语法:
在PL/SQL块中定义变量和常量的语法如下:
identifier [constant] datatype [not null] [:=| default expr]
identifier :用于指定变量或常量名称
constant :指定常量.当定义常量时,必需指定它的初始值,并且其数值不能改变
datatype :指定变量或常量的数据类型
not null :强制初始化变量(不能为NULL).当指定NOT NULL选项时,必需要为变量提供数值
:= :用于为变量和常量指定初始值 在PL/SQL块中为变量赋值不同于其它编程语言,必需要在等号前面加冒号(:=)
default :用于为变量和常量指定初始值
expr :指定初始值的PL/SQL表达式,可以是文本值,其他变量,函数等
定义标量变量实例:
v_ename varchar2(10); -->定义变量v_ename为可变长的字符串类型长度最长为10
v_sal number(6,2);
v_balance binary_float;
c_tax_rate constant number(3,2):=5.5; -->定义的常量
v_hiredate date;
v_valid boolean not null default false; 为变量v_valid提供了初始值,
需注意,如果在定义变量时没有指定初始值,那么变量初始值为null
使用标量变量
例:实现以输入雇员号显示雇员姓名,工资,个人所得税.
SQL> set serveroutput on
SQL> declare
2 v_ename varchar2(5);
3 v_sal number(6,2);
4 c_tax_rate constant number(3,2):=0.03;
5 v_tax_sal number(6,2);
6 begin
7 select ename,sal into v_ename,v_sal from emp
8 where empno=&eno;
9 v_tax_sal:=v_sal*c_tax_rate;
10 dbms_output.put_line('雇员名:'||v_ename);
11 dbms_output.put_line('雇员工资:'||v_sal);
12 dbms_output.put_line('所得税:'||v_tax_sal);
13 end;
14 /
输入 eno 的值: 7788
原值 8: where empno=&eno;
新值 8: where empno=7788;
雇员名:SCOTT
雇员工资:3000
所得税:90
PL/SQL 过程已成功完成。
SQL>
SQL> select ename from emp where empno=7654;
ENAME
----------
MARTIN
SQL>
SQL> declare
2 v_ename varchar2(5);
3 v_sal number(6,2);
4 c_tax_rate constant number(3,2):=0.03;
5 v_tax_sal number(6,2);
6 begin
7 select ename,sal into v_ename,v_sal from emp
8 where empno=&eno;
9 v_tax_sal:=v_sal*c_tax_rate;
10 dbms_output.put_line('雇员名:'||v_ename);
11 dbms_output.put_line('雇员工资:'||v_sal);
12 dbms_output.put_line('所得税:'||v_tax_sal);
13 end;
14 /
输入 eno 的值: 7654
原值 8: where empno=&eno;
新值 8: where empno=7654;
declare
*
第 1 行出现错误:
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 line 7
以上报错因为输入的编号对应的雇员名超过了变量定义的v_ename varchar2(5) 长度,则会显示错误信息(ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小),原因是v_ename变量的
最大长度为5字节,而emp表中ename列的最大长度为10个字节,所以只需要将v_ename变量的最大长度设置为10字节.
SQL> declare
2 v_ename varchar2(10); <==做变更
3 v_sal number(6,2);
4 c_tax_rate constant number(3,2):=0.03;
5 v_tax_sal number(6,2);
6 begin
7 select ename,sal into v_ename,v_sal from emp
8 where empno=&eno;
9 v_tax_sal:=v_sal*c_tax_rate;
10 dbms_output.put_line('雇员名:'||v_ename);
11 dbms_output.put_line('雇员工资:'||v_sal);
12 dbms_output.put_line('所得税:'||v_tax_sal);
13 end;
14 /
输入 eno 的值: 7654
原值 8: where empno=&eno;
新值 8: where empno=7654;
雇员名:MARTIN
雇员工资:1663.75
所得税:49.91
PL/SQL 过程已成功完成。
为了降低PL/SQL程序的维护工作量,可以使用%TYPE属性定义变量
使用%TYPE属性
定当以PL/SQL变量存放列值时,必需确保变量使用合适的数据类型和长度,否则在运行过程中可能会出现PL/SQL运行错误.为了避免这种不必要的错误,可以使用%TYPE属性定
义变量.当使用%TYPE属性定义变量时,它会按照数据库列或其他变量来确定新变量的类型和长度
例:
SQL> declare
2 v_ename emp.ename%type; <--使用%type属性
3 v_sal number(6,2);
4 c_tax_rate constant number(3,2):=0.03;
5 v_tax_sal number(6,2);
6 begin
7 select ename,sal into v_ename,v_sal from emp
8 where empno=&eno;
9 v_tax_sal:=v_sal*c_tax_rate;
10 dbms_output.put_line('雇员名:'||v_ename);
11 dbms_output.put_line('雇员工资:'||v_sal);
12 dbms_output.put_line('所得税:'||v_tax_sal);
13 end;
14 /
输入 eno 的值: 7654
原值 8: where empno=&eno;
新值 8: where empno=7654;
雇员名:MARTIN
雇员工资:1663.75
所得税:49.91
PL/SQL 过程已成功完成。
SQL>
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22279684/viewspace-682492/
,如需转载,请注明出处,否则将追究法律责任。