欢迎来到天天文库
浏览记录
ID:53875213
大小:20.50 KB
页数:5页
时间:2020-04-10
《杨国福综合练习.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、包、过程、函数、触发器练习1.简述存储过程和函数的区别。答:相同点:函数和存储过程的输入参数以及函数的返回参数的定义都不能定义精度;默认的参数模式是输入。不同点:存储过程作为PL/SQL语句块来执行,用输出参数返回值,可以返回任何值。函数作为表达式的一部分调用,用返回语句返回值,必须包含至少一条return,必须返回单个值。2.编写一个函数以检查所指定雇员的薪水是否在有效范围内。不同职位的薪水范围为: DesignationRaise Clerk1500-2500 Salesman2501-3500
2、Analyst3501-4500 Others4501andabove. 如果薪水在此范围内,则显示消息"SalaryisOK",否则,更新薪水为该范围内的最小薪水值。3.编写一个函数,判断给定的日期所在月份的天数createorreplacefunctionfun(nindate)returnnumberisresultnumber;beginselectto_number(to_char(last_day(n),'dd'))intoresultfromdual;returnresult;endfun;
3、declareanumber;begina:=fun(to_date('2010-02-01','yyyy-mm-dd'));dbms_output.put_line('给定日期所在月份的天数是:'
4、
5、a
6、
7、'天');end;declareanumber;begina:=fun(date'2010-02-01');dbms_output.put_line('给定日期所在月份的天数是:'
8、
9、a
10、
11、'天');end;selectfun(to_date('2000-02-01','yyyy-mm-dd'))from
12、dual;selectfun(date'2000-02-01')fromdual;4、编写存储过程,显示各个职位(job),工资在2000元以上人数和1000元以下人数。5、创建一个过程,打印出各个工资级别的人数。备注:显示的格式为三种情况1、工资少于2000的人数为:***;工资在2000——3000的人数为****;工资大于3000的人数为:*****createorreplaceprocedurepro1isnum1number;num2number;num3number;beginselectcoun
13、t(*)intonum1fromempwheresal<2000;selectcount(*)intonum2fromempwheresalbetween2000and3000;selectcount(*)intonum3fromempwheresal>3000;dbms_output.put_line('工资少于2000的人数为:'
14、
15、num1
16、
17、'个');dbms_output.put_line('工资在2000—3000的人数为:'
18、
19、num2
20、
21、'个');dbms_output.put_line('工
22、资大于3000的人数为:'
23、
24、num3
25、
26、'个');endpro1;6、创建一个表salary_change_record(empid,old_salary,new_salary,change_date),old_salary:用来纪录员工原来的工资,new_salary:用来纪录更新后的工资,change_date:记录更新的系统时间。然后创建一个触发器,名称为change_record,功能:每次更新员工工资之后,将更新纪录保存到表salary_change_record中。7、编写一个数据包,它有两个函
27、数和两个过程以操作"emp"表。该数据包要执行的任务为:插入一个新雇员;删除一个现有雇员;显示指定雇员的整体薪水;显示指定雇员所在部门名称。8、编写一个触发器实现如下功能:对修改职工薪金的操作进行合法性检查:a)修改后的薪金要大于修改前的薪金b)工资增量不能超过原工资的10%c)目前没有单位的职工不能涨工资9、控制数据安全性:例如:限制system用户在正常工作时间(9:00-17:00)改变emp表数据10、建立视图v_dept_emp,显示员工编号、员工姓名、员工所在部门的编号和部门名称然后建立inste
28、sdof触发器,通过该触发器在视图v_dept_emp上插入数据
此文档下载收益归作者所有