当前位置:文档之家› oracle PLSQL 程序设计

oracle PLSQL 程序设计

PL/SQL 程序设计
一、实验目的
1.掌握PL/SQL的编写方法;
2.掌握PL/SQL的基本语法、控制结构、游标、异常处理和存储
子程序。

二、实验内容和要求
1、教程第363页,实训题第1到8小题(写出所有命令);
三、实验步骤
(1)
DECLARE
CURSOR c_emp IS select * from emp;
BEGIN
FOR v_emp IN c_emp LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.ename||' '||v_emp.empno||'
'||v_emp.deptno||' '||v_emp.sal);
END LOOP;
END;
(2)
DECLARE
v_emp emp%ROWTYPE;
BEGIN
SELECT * INTO v_emp FROM EMP WHERE ename='SMITH';
DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.sal||'
'||v_emp.deptno);
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO EMP(EMPNO,ENAME,SAL,DEPTNO)
VALUES(2007,'SMITH',1500,10);
WHEN TOO_MANY_ROWS THEN
FOR v IN (SELECT * FROM EMP WHERE ENAME='SMITH') LOOP DBMS_OUTPUT.PUT_LINE(v.empno||' '||v.sal||' '||v.deptno); END LOOP;
END;
(3)
CREATE OR REPLACE PROCEDURE SHOWSAL(p_empno
scott.emp.empno%type)
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM scott.emp WHERE empno=p_empno; DBMS_OUTPUT.PUT_LINE(v_sal);
END;
begin
showsal(7844);
end;
(4)
CREATE OR REPLACE PROCEDURE UPDATESAL (p_empno emp.empno%TYPE) AS
v_deptno emp.deptno%TYPE;
v_inc emp.sal%TYPE;
BEGIN
SELECT deptno INTO v_deptno FROM emp WHERE empno=p_empno; CASE v_deptno
WHEN 10 THEN v_inc:=150;
WHEN 20 THEN v_inc:=200;
WHEN 30 THEN v_inc:=250;
ELSE v_inc:=300;
END CASE;
UPDATE emp SET sal=sal+v_inc WHERE empno=p_empno;
END;
(5)
CREATE OR REPLACE FUNCTION fun_sal(p_empno emp.empno%type) RETURN emp.sal%TYPE
AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM EMP WHERE empno=p_empno;
RETURN v_sal;
END;
(6)
CREATE OR REPLACE FUNCTION fun_avgsal(p_deptno
emp.deptno%type)
RETURN emp.sal%type
AS
v_sal emp.sal%type;
BEGIN
SELECT AVG(SAL) INTO V_SAL FROM EMP WHERE DEPTNO=P_DEPTNO; RETURN V_SAL;
END;
(7)
CREATE OR REPLACE FUNCTION fun_avg_sal(p_empno
emp.empno%type)
RETURN emp.sal%type
AS
v_sal emp.sal%type;
BEGIN
SELECT AVG(SAL) INTO V_SAL FROM EMP WHERE DEPTNO=(select deptno from emp where
empno=p_empno);
RETURN V_SAL;
END;
(8)
CREATE OR REPLACE PACKAGE PKG_EMP
AS
FUNCTION func_highsal(p_deptno emp.deptno%type) RETURN emp.sal%type;
PROCEDURE proc_highsal(p_deptno emp.deptno%type);
END;
CREATE OR REPLACE PACKAGE BODY PKG_EMP
AS
FUNCTION func_highsal(p_deptno emp.deptno%type)
RETURN emp.sal%type
AS
v_highsal emp.sal%type;
BEGIN
select max(sal) into v_highsal from emp where deptno=p_deptno; return v_highsal;
END;
PROCEDURE proc_highsal(p_deptno emp.deptno%type)
AS
BEGIN
FOR v_emp IN (SELECT * FROM EMP WHERE deptno=p_deptno and sal=func_highsal(p_deptno)) LOOP
DBMS_OUTPUT.PUT_LINE(v_emp.empno||' '||v_emp.ename);
END LOOP;
END;
END;
BEGIN
pkg_emp.proc_highsal(10);
END;
四、实验总结
本次实验让我熟悉PL/SQL的编写方法,PL/SQL的基本语法、控制结构、游标、异常处理和存储子程序等各种知识点。

总体上来说是比较顺利的,不过实验中也遇到一些难题:例如结果显示不出,原因是没把环境变量serveroutput 设置为on。

这次实验让我更加熟悉oracle这个数据库!。

相关主题