实验3PLSQL编程Word文件下载.docx
- 文档编号:13167273
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:16
- 大小:154.55KB
实验3PLSQL编程Word文件下载.docx
《实验3PLSQL编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验3PLSQL编程Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
6.创建一个显示雇员总人数的存储过程emp_count,并执行该存储过程
7.编写显示雇员信息的存储过程EMP_LIST,并引用EMP_COUNT存储过程
8.创建函数,实现功能为:
在scott.emp表和scott.dept表中查询出任意给定职工号的职工姓名及职工所在部门的名称。
9.创建触发器,实现更新dept表中的deptno值,级联更新emp表中相应值。
10.对存储过程、函数及触发器实现查看、修改、删除等基本操作。
主要算法和程序清单:
1.
DECLARE
v_empnoemp.empno%TYPE:
=7788;
v_salemp.sal%TYPE;
v_addemp.sal%TYPE;
BEGIN
SELECTsalINTOv_salFROMempWHEREempno=v_empno;
IFv_sal<
3000
THENv_add:
=3000;
ELSE
dbms_output.put_line('
sal>
3000'
);
ENDIF;
UPDATEempSETsal=v_addWHEREempno=v_empno;
END;
/
2.
declare
typev_recordisrecord(
nameemp.ename%type,
salaryemp.sal%type,
jobemp.job%type,
deptnoemp.deptno%type
empinfov_record;
--定义变量
begin
selectename,sal,job,deptno
intoempinfo
fromemp
whereempno=7788;
dbms_output.put_line('
雇员'
||empinfo.name||'
的职务是:
'
||empinfo.job||'
工资是:
||empinfo.salary||'
部门号是:
||empinfo.deptno);
end;
3.
cursorc_empisselect*fromscott.empforupdate;
v_incrementnumber;
forv_empinc_emploop
casev_emp.deptno
when10thenv_increment:
=100;
when20thenv_increment:
=160;
when30thenv_increment:
=200;
elsev_increment:
=300;
endcase;
updatescott.empsetsal=sal+v_incrementwhere
currentofc_emp;
endloop;
4.
5.
updatescott.dept
setloc='
BEIJING'
wheredeptno=50;
ifsql%notfoundthen
insertintoscott.dept(deptno,loc)values(50,'
dbms_output.put_line('
插入成功!
ELSE
更新成共'
endif;
end;
6.
createorreplaceprocedureemp_count
asv_totalnumber;
selectcount(*)intov_totalfromscott.emp;
dbms_output.put_line('
雇员总数:
||v_total);
SQL>
executeemp_count;
15
PL/SQL过程已成功完成。
begin
2emp_count;
3end;
4/
7.
1CREATEORREPLACEPROCEDUREEMP_LIST
2AS
3CURSORemp_cursorIS
4SELECTempno,enameFROMscott.emp;
5BEGIN
6FOREmp_recordINemp_cursorLOOP
7DBMS_OUTPUT.PUT_LINE(Emp_record.empno||Emp_record.ename);
8ENDLOOP;
9EMP_COUNT;
10*END;
/
过程已创建。
8.
CREATEORREPLACEPROCEDUREselect_emp
2(v_emp_noINemp.empno%type)
3IS
4v_emp_nameemp.ename%type;
5v_dept_namedept.dname%type;
6BEGIN
7SELECTEMP.ENAME,DEPT.DNAME
8INTOv_emp_name,v_dept_name
9FROMEMP,DEPT
10WHEREEMP.DEPTNO=DEPT.DEPTNOANDEMPNO=v_emp_no;
11DBMS_OUTPUT.PUT_LINE(v_emp_name||'
'
||v_dept_name);
12ENDselect_emp;
13/
EXECUTEselect_emp(7844);
TURNERSALES
CREATEORREPLACETRIGGERupdate_dept_to_emp
2AFTERUPDATEONDEPTFOREACHROW
3BEGIN
4IFUPDATINGTHEN
5UPDATEEMPSETDEPTNO=:
new.DEPTNO
6WHEREDEPTNO=:
old.DEPTNO;
7ENDIF;
8ENDupdate_dept_to_emp;
9/
触发器已创建
9.
CREATEORREPLACETRIGGERtr_reg_dep
AFTERupdateOFdeptno
ONdept
FOREACHROW
DBMS_OUTPUT.PUT_LINE('
旧的deptno值是'
||:
old.deptno
||'
、新的deptno值是'
new.deptno);
UPDATEempSETdeptno=:
new.deptno
WHEREdeptno=:
old.deptno;
10.
selectobject_name,statusfromuser_objectswhereobject_type='
FUNCTION'
;
PROCEDURE'
SELECTOBJECT_NAMEFROMDBA_OBJECTSWHEREOBJECT_TYPE='
TRIGGER'
dropprocedureselect_emp;
DROPFUNCTIONGET_AVG_PAY;
DROPTRIGGERTR_REG_DEP;
五、拓展题
--创建一个包mypackage,声明该包有一个过程update_sal和一个函数get_YearSal
createorreplacepackagemyPackageis
procedureupdate_sal(namevarchar2,newsalnumber);
functionget_YearSal(namevarchar2)returnnumber;
createorreplacepackagebodymyPackageis
procedureupdate_sal(namevarchar2,newsalnumber)is
begin
updateempsetsal=newSalwhereename=name;
end;
functionget_YearSal(namevarchar2)returnnumberis
v_salnumber(7,2);
begin
selectsal*12+nvl(comm,0)intov_salfromempwhereename=name;
returnv_sal;
end;
调用执行包中的存储过程或函数
我们现在有这样一张用户表表结构如下,希望向表中增加数据时,表中id列的数字自动生成。
第一步创建序列,要求开始的数字为1,每次递增1,按顺序产生序列值;
第二步创建一个触发器,向用户表中插入数据的时候触
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 PLSQL 编程