Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx

上传人:b****0 文档编号:275059 上传时间:2022-10-08 格式:DOCX 页数:14 大小:37.79KB
下载 相关 举报
Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx_第1页
第1页 / 共14页
Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx_第2页
第2页 / 共14页
Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx_第3页
第3页 / 共14页
Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx_第4页
第4页 / 共14页
Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx

《Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx》由会员分享,可在线阅读,更多相关《Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx(14页珍藏版)》请在冰豆网上搜索。

Oracle实验5PLSQL复合数据类型记录表和可变数组资料.docx

Oracle实验5PLSQL复合数据类型记录表和可变数组资料

《数据库开发技术》实验5报告

实验题目:

PL/SQL复合数据类型:

记录、表和可变数组

日期

2015–11-28

班级

计算机1301

姓名

实验环境:

Win10+Oracle11g

一、实验内容与完成情况(记录所有的实验过程):

1、根据表emp的全部字段定义记录变量emp_record。

用SELECT语句将编号为7788的雇员的全部字段对应地存入该记录变量,最后输出记录变量的雇员名称字段emp_record.ename和雇员工资字段的内容。

执行结果如下:

SCOTT的工资为:

3000

PL/SQL过程已成功完成。

PL/SQL过程已成功完成。

SQL语句

setSERVEROUTPUTON

DECLARE

TYPEemp_recordisRECORD

(empnoEMP.EMPNO%TYPE,

enameEMP.ENAME%TYPE,

JobEMP.JOB%TYPE,

mgrEMP.MGR%TYPE,

hiredateEMP.HIREDATE%TYPE,

salEMP.SAL%TYPE,

commnumber(10,2):

=0,

deptnonumber(3):

=10

);

e_recordemp_record;

begin

select*intoe_record

fromempwhereempno=7788;

dbms_output.put_line(e_record.ename||'的工资为:

'||to_char(e_record.sal));

end;/

实验结果截图

2、声明一张Index_By(关联数组)表,用来接收并存储DEPT表的信息,把部门号作为键,不要忘记部门号是10的倍数。

使用循环从DEPT表中将所有部门信息检索到PL/SQL记录表中,然后用另一个循环来显示表中的这些信息。

执行结果为:

10,ACCOUNTING,NEWYORK

20,RESEARCH,DALLAS

30,SALES,CHICAGO

40,OPERATIONS,BOSTON

PL/SQL过程已成功完成。

SQL语句

SETSERVEROUTPUTON

DECLARE

typedept_typeistableOFdept%rowtype

indexbybinary_integer;

v_countnumber;

dept_listdept_type;

begin

selectCOUNT(*)intov_countFROMdept;

foriIN1..v_countLOOP

select*intodept_list(i*10)

fromdeptwheredeptno=i*10;

ENDLOOP;

FORiIN1..v_countLOOP

DBMS_OUTPUT.PUT_LINE(dept_list(i*10).deptno||','||dept_list(i*10).dname||','||dept_list(i*10).loc);

ENDLOOP;

end;/

实验结果截图

3、*阅读以下程序,找出出错之处,说明出错原因,预测运行输出结果是什么。

请删改错误,加上适当注释后,运行该程序,验证自己的预测是否正确。

SETSERVEROUTPUTON

DECLARE

TYPEdept_listISTABLEOFdept.dname%TYPE;--定义嵌套表

TYPEtop5_listISVARRAY(5)OFdept.loc%TYPE;--定义可变数组

dis_deptdept_list;--嵌套表的声明

num_5top5_list;--可变数组的声明

BEGIN

dis_dept

(1):

='AMGN';

IFdis_deptISNULLTHEN

dis_dept:

=dept_list('AMGN','BGEN');

DBMS_OUTPUT.PUT_LINE('dis_dept表当前元素个数为:

'||to_char(dis_dept.count));

ENDIF;

num_5:

=top5_list('ORCL','CSCO',NULL,NULL);

IFnum_5(3)ISNULLTHEN

num_5(3):

='CPQ';

ENDIF;

num_5(4):

='DELL';

FORCOUNTERIN1..4LOOP

DBMS_OUTPUT.PUT_LINE(NUM_5(COUNTER));

ENDLOOP;

END;

/

执行结果为:

SQL语句

SETSERVEROUTPUTON

DECLARE

TYPEdept_listISTABLEOFdept.dname%TYPE;--定义嵌套表

TYPEtop5_listISVARRAY(5)OFdept.loc%TYPE;--定义可变数组

dis_deptdept_list;--嵌套表的声明

num_5top5_list;--可变数组的声明

BEGIN

/*修改:

在此处给dis_dept初始化,否则无法使用*/

IFdis_deptISNULLTHEN

dis_dept:

=dept_list('AMGN','BGEN');

DBMS_OUTPUT.PUT_LINE('dis_dept表当前元素个数为:

'||to_char(dis_dept.count));

ENDIF;

num_5:

=top5_list('ORCL','CSCO',NULL,NULL);

IFnum_5(3)ISNULLTHEN

num_5(3):

='CPQ';

ENDIF;

num_5(4):

='DELL';

FORCOUNTERIN1..4LOOP

DBMS_OUTPUT.PUT_LINE(NUM_5(COUNTER));

ENDLOOP;

END;

实验结果截图

4、将上题改为使用INDEXBYBINARY_INTEGER的索引表,则实现同一执行结果,程序要做哪些相应的改变。

以下是与上题对应的另一个相关的例子:

SETSERVEROUTPUTON

DECLARE

TYPEdept_listISTABLEOFdept.dname%TYPEindexbybinary_integer;--定义索引组织表

TYPEtop5_listISVARRAY(5)OFdept.loc%TYPE;--定义可变数组

dis_deptdept_list;--索引表的声明

num_5top5_list;--可变数组的声明

v_countnumber(3);

BEGIN

dis_dept

(1):

='AMGN';--为表元素赋值

IFnotdis_dept.exists

(2)THEN

dis_dept

(2):

='BGEN';

DBMS_OUTPUT.PUT_LINE('dis_dept表当前元素个数为:

'||to_char(dis_dept.count));

--dis_dept.extend

(2);--索引表无须使用extend(n)增加元素,使用了反而出错

dis_dept(3):

='EXTEND_ELEMENT';

v_count:

=dis_dept.count;

DBMS_OUTPUT.PUT_LINE('dis_dept表增添元素后的个数为:

'||to_char(dis_dept.count));

FORiIN1..v_countloop

DBMS_OUTPUT.PUT_LINE(dis_dept(i));

ENDLOOP;

ENDIF;

num_5:

=top5_list('ORCL','CSCO',NULL,NULL);

IFnum_5(3)ISNULLTHEN

num_5(3):

='CPQ';

ENDIF;

num_5(4):

='DELL';

FORCOUNTERIN1..4LOOP

DBMS_OUTPUT.PUT_LINE(NUM_5(COUNTER));

ENDLOOP;

END;

实验结果截图

5、使用%ROWTYPE属性,基于游标student_cur定义记录。

显示'CS'系学生的序号、姓名和年龄等信息。

(参见教材P255例11.3)

执行结果为:

序号学生姓名年龄

1李明勇20

2张立19

SQL语句

SETSERVEROUTPUTON

declare

CURSORstudent_cur

IS

SELECTsno,sname,sageFROMstudent

WHEREsdept='CS';

stu_recordstudent_cur%rowtype;

begin

DBMS_OUTPUT.PUT_LINE('序号姓名年龄');

FORstu_recordINstudent_curLOOP

DBMS_OUTPUT.PUT_LINE(stu_record.sno||''||stu_record.sname||''||stu_record.sage);

ENDLOOP;

end;

实验结果截图

6.阅读以下程序,并写出程序执行结果。

{

CREATETYPEsname_typeISTABLEOFVARCHAR2(10);

CREATETABLEMentors(

mentor_idNUMBER(5)

CONSTRAINTmentor_pkPRIMARYKEY,

mentor_nameVARCHAR2(10)NOTNULL,

student_namesname_type

)NESTEDTABLEstudent_nameSTOREASsname_table;

INSERTINTOmentors

VALUES(10101,'王彤',sname_type('王晓芳','张纯玉','刘春苹','王晓芳'));

INSERTINTOmentors

VALUES(10104,'孔世杰',sname_type('王天仪','韩刘','刘春苹'));

}

SETSERVEROUTON

DECLARE

sname_table1sname_type;

sname_table2sname_type;

sname_tablesname_type;

BEGIN

SELECTstudent_name

INTOsname_table1

FROMmentors

WHEREmentor_name='王彤';

DBMS_OUTPUT.PUT_LINE('集合sname_table1中的元素--');

FORiIN1..sname_table1.COUNTLOOP

DBMS_OUTPUT.PUT_LINE('学生姓名:

'||sname_table1(i));

ENDLOOP;

SELECTstudent_name

INTOsname_table2

FROMmentors

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1