oracle PLSQL 程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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