广东技术师范学院实验报告学院:计算机科学学院专业:计算机科学与技术(师资)班级:成绩:姓名:孔哥哥学号:组别:组员:实验地点:Win10电脑实验日期:指导教师签名:实验名称:实验三:PL/SQL程序块简单应用一、实验目的:a)通过独立完成实验报告,让学生掌握以下技能:b)掌握SQL的基本操作c)掌握简单PL/SQL程序块的编写二、实验内容:a)建立表、索引、视图、同义词b)对数据进行插入操作c)编写一个PL/SQL块三、实验步骤:a)启动SQL*PLUS,以SCOTT模式连接到数据库;b)创建社保信息表,包含员工号、员工姓名、部门,工资,雇佣日期,社保缴费基数,月社保费等字段。预习情况操作情况考勤情况数据处理情况c)编写PL/SQL程序块ShowInfo,给定一个员工号就可以显示其姓名、性别等信息,如果该员工不存在则显示‘对不起,没有此员工!’d)编写PL/SQL程序块processInfo,对员工岗位进行判断,决定缴费基数,计算社保费,写入数据库中。岗位job社保缴费工资基数个人每月社保费备注CLERK2000工资*0.07SALESMAN3000工资*0.08MANAGER5000工资*0.09PRESIDENT7000工资*0.11注意:社保缴费工资与实际工资可以不相同,社保缴费工资和每月养老保险费可以放在工资表里。declarev_shebaojishunumber(6);v_yueshebaofeinumber(7,2);beginforv_empin(select*fromemp)loopcasewhenv_emp.job='CLERK'thenv_shebaojishu:=2000;v_yueshebaofei:=v_emp.sal*0.07;whenv_emp.job='SALESMAN'thenv_shebaojishu:=3000;v_yueshebaofei:=v_emp.sal*0.08;whenv_emp.job='MANAGER'thenv_shebaojishu:=5000;v_yueshebaofei:=v_emp.sal*0.09;whenv_emp.job='PRESIDENT'thenv_shebaojishu:=7000;v_yueshebaofei:=v_emp.sal*0.11;elsev_yueshebaofei:=0;endcase;insertintoshebao(emp_empno,emp_ename,emp_job,emp_sal,emp_hiredate,shebaojishu,yueshebaofei)values(v_emp.empno,v_emp.ename,v_emp.job,v_emp.sal,v_emp.hiredate,v_shebaojishu,v_yueshebaofei);endloop;end;/插入成功后输入select*fromshebao;查询是否成功写入数据库中四、实验问题及原因1.c步骤的时候没有分清%type和%rowtype以下是区别和用法:%TYPE:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。使用%TYPE特性的优点在于:1.所引用的数据库列的数据类型可以不必知道;2.所引用的数据库列的数据类型可以实时改变。?12345678declare--定义一个记录类型typeemp_recordisrecord(v_nameemployees.last_name%type,v_emailemployees.email%type,v_salaryemployees.salary%type,v_job_idemployees.job_id%type);91011121314151617181920--声明自定义记录类型的变量v_emp_recordemp_record;begin--通过select...into...语句为变量赋值selectlast_name,email,salary,job_idintov_emp_recordfromemployeeswhereemployee_id=101;--打印变量的值dbms_output.put_line(v_emp_record.v_name||','||v_emp_record.v_email||','||v_emp_record.v_salary||','||v_emp_record.v_job_id);end;返回结果:12Kochhar,NKOCHHAR,17000,AD_VPPL/SQLproceduresuccessfullycompleted%ROWTYPE:PL/SQL提供%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致。使用%ROWTYPE特性的优点在于:1.所引用的数据库中列的个数和数据类型可以不必知道;2.所引用的数据库中列的个数和数据类型可以实时改变。?1234567891011121314declare--声明一个记录类型的变量v_emp_recordemployees%rowtype;begin--通过select...into...语句为变量赋值select*intov_emp_recordfromemployeeswhereemployee_id=101;--打印变量的值dbms_output.put_line(v_emp_record.last_name||','||v_emp_record.email||','||v_emp_record.salary||','||v_emp_record.job_id||','||v_emp_record.hire_date);end;返回结果:12Kochhar,NKOCHHAR,17000,AD_VP,21-9月-89PL/SQLproceduresuccessfullycompleted2.在用dbms_output.put_line输出时一定要记得先输入setserveroutputon;才可以看得到结果。