oracle数据库高级编程(二)


个人见解:record是一个自定一类型,本意相当于java中的class,可以在record中定义属于自己的类。
语法:type 类名 is record();
eg:1.定义一个record类并说明类中的字段。
2.为这个类声明一个对象来操作这个类的数据,就跟java中的new 一个对象一样。
3.给字段赋值,并输出,|| 指的是链接字符串
1. declare
type student is record(
sname varchar2(20),
sid number(4),
sex char(4)
);
2. s student;
3. begin
s.sid := 2;
s.sex := '男';
dbms_output.put_line(s.sid || s.sex);
end;

通过声明一个对象,将对象类型定义为已有表emp的全字段类型,并查询的结果付给这个对象,但是查询结果只能有一条,因为只有一个对象不是数组,所以给的数据也只能是有条件的一条。
1.将person对象声明并把emp表的全字段类型付给person。
2.将条件为编号20的人的信息给person,输出查询到的数据,如sname等。
declare
1.person emp%rowtype;
begin
2.select * into person from emp where sid = 20;
dbms_output.put_line(person.sid||person.sname);
end;

table类型有点像java中的map,也有其(key,value)。
语法:type 名称 is table of number index by 数据类型(其中number为值类型可以是别的类型,index by为键)。
eg :DECLARE
--不支持number类作为key,Binary_Integer为整型
TYPE he IS TABLE OF VARCHAR2(10) INDEX BY Binary_Integer;
--为自定义类型he声明一个对象叫做h。
h he;
BEGIN
h(0) := '和1';
h(2) := '2';
dbms_output.put_line(h(0) || h(2));
END;
注意:
1.如果要查看第一个元素的key可以使用方法h.first(),
获取下一个元素的key h.next(),最后一个h.last()。
都是获取key的不是value的。
2.对象的key是自动排序的,如果插入顺序是h(1),h(4),h(2)你使用h.last(),得到的仍然是h(4)的key值!

