PL/SQL变量使用

1、%TYPE的使用
DECLARE
	name scott.emp.ename%TYPE;
BEGIN
	SELECT ename INTO name FROM emp WHERE empno=7788;
END;
--这种方式声明变量就是让变量的类型完全参考某个表的某个列的类型,与其完全一样。在上面的例子中,name的类型就是跟scott的emp表的ename列的类型完全一样,这样就能够很好的存储从其中select到的值。


2、RECORD的使用
DECLARE
	salary number(7,2);	--普通的常见变量声明
	TYPE emp_record IS RECORD(ename varchar2(20),id number(6));	--此处声明一个类型emp_record,可以发现很像是一张表
	e_record emp_record;	--e_record的数据类型是emp_record,也就是自定义的类型
BEGIN
	e_record.ename := 'FRMH';
	e_record.id := 123456;
END;
--RECORD其实就是一种datatype,只是比较特殊而已。从上面的声明方法中可以看到,很像是一张表,但是它只能存储一行数据。


3、%ROWTYPE的使用
--用来简化RECORD的声明,但是也有区别,来个例子看看
DECLARE
	e_record scott.emp%ROWTYPE;
BEGIN
	SELECT * FROM scott.emp INTO e_record WHERE empno=7788;
END;
--使用TYPE .. IS RECORD();方式可以自由指定其所包含的元素个数,但是使用%ROWTYPE的话,它就会参照emp表建立一个类型,包含emp所包含的列,而不能自己指定个数了。
--总结一下RECORD,它就像是一张表,只是这张表比较特殊,只能存储一行的数据。


4、PL/SQL表,又叫INDEX BY表
DECLARE
	TYPE emp_table IS TABLE OF varchar2(20) INDEX BY binary_integer;	--声明方式,并且存储的是字符型值
	e_table emp_table;	--声明e_table是emp_table类型变量
BEGIN
	e_table(0) := 'ABNER';
	e_table(1) := 'FRMH';
	e_table(2) := 'HELLO';
	DBMS_OUTPUT.PUTLINE(e_table(0)||e_table(1)||e_table(2));
END;
--可以发现,这种方式,一旦声明的是字符型,那么只能存储字符型的值,很不方便。有没有更好的方法呢?
--有,答案就是与RECORD结合起来使用。


5、PL/SQL表与RECORD结合
--直接看一个实际例子
DECLARE
	TYPE emp_record IS RECORD(ename VARCHAR2(25),
								job VARCHAR2(10),
                                sal NUMBER(7,2));
	TYPE emp_table IS TABLE OF emp_record INDEX BY binary_integer;
	e_table emp_table;
BEGIN
	SELECT ename,job,sal INTO e_table(0) FROM scott.emp WHERE empno=7369;
	DBMS_OUTPUT.PUTLINE('index 0 : '||emp_table(0).ename);
END;
--有了上面那一些列的铺垫,这个就不用再解释了。
--注意顺序:先声明一种RECORD,再声明一种TABLE,类型为RECORD。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值