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; (9)
CREATE OR REPLACE TRIGGER trg_emp AFTER INSERT OR UPDATE OR DELETE ON EMP DECLARE
v_sal emp.sal%type; v_count number; BEGIN
SELECT AVG(SAL),COUNT(*) INTO V_SAL,V_COUNT FROM EMP; DBMS_OUTPUT.PUT_LINE(V_SAL||' '||V_COUNT); END; (10)
CREATE OR REPLACE PACKAGE PKG_DEPTNO AS
V_DEPTNO EMP.DEPTNO%TYPE; V_SAL EMP.SAL%TYPE; END;
CREATE OR REPLACE TRIGGER trg_updateemp BEFORE UPDATE ON EMP FOR EACH ROW BEGIN
PKG_DEPTNO.V_SAL:=:NEW.SAL;
PKG_DEPTNO.V_DEPTNO:=:NEW.DEPTNO; END;
CREATE OR REPLACE TRIGGER trg_statement AFTER UPDATE ON EMP
DECLARE
v_highsal emp.sal%type; v_lowsal emp.sal%type; BEGIN
SELECT MAX(SAL),MIN(SAL) INTO v_highsal,v_lowsal
FROM EMP WHERE DEPTNO= PKG_DEPTNO.V_DEPTNO;
IF PKG_DEPTNO.V_SAL>v_highsal or pkg_deptno.v_sal 第16章 基于Oracle数据库的应用开发 1.简答题 (1) 基于Oracle数据库的应用程序开发的基本过程包括:需求分析;系统设计包括:数据库设计E-R图、数据库表创建、各个功能模块的划分等;核心代码实现(包括数据库连接)、界面实现;测试等。 (2) 基于Oracle数据库进行B/S结构应用程序开发的基本技术:熟悉B/S结构、熟悉数据库技术、熟悉B/S结构编程语言、熟悉应用服务器配置等。 2.实训题(参考) (1) E-R图如下: 还书日期 出生日期 作者 书名 性别 借书日期 编号 r s 图书 读者 借阅 编号 姓名 定价 出版社 m q 管理图书 管理读者 权限 n p 图书管理员 (2) 帐号 密码 关系模式如下: 图书(编号,书名,作者,定价,出版社) 读者(编号,姓名,性别,出生日期) 图书管理员(帐号,密码,权限) 管理图书(图书编号,帐号) 管理读者(读者编号,帐号) 借阅(图书编号,读者编号,借书日期,还书日期) (3) 基本表创建如下: CREATE TABLE 图书( 编号 CHAR(10) PRIMARY KEY, 书名 VARCHAR(30) NOT NULL, 作者 VARCHAR(20), 定价 DECIMAL(6,2), 出版社 VARCHAR(20) ) CREATE TABLE读者( 编号 CHAR(10) PRIMARY KEY, 姓名 VARCHAR(10) NOT NULL, 性别 CHAR(2), 出生日期 DATETIME ) CREATE TABLE图书管理员( 帐号 VARCHAR(20) PRIMARY KEY, 密码 VARCHAR(20) NOT NULL, 权限 VARCHAR(10) ) CREATE TABLE管理图书( 图书编号 CHAR(10), 帐号 VARCHAR(10), PRIMARY KEY(图书编号, 帐号), FOREIGN KEY(图书编号) REFERENCES 图书(编号), FOREIGN KEY(帐号) REFERENCES 图书管理员(帐号) ) CREATE TABLE管理读者( 读者编号 CHAR(10), 帐号 VARCHAR(10), PRIMARY KEY(读者编号, 帐号), FOREIGN KEY(读者编号) REFERENCES 读者(编号), FOREIGN KEY(帐号) REFERENCES 图书管理员(帐号) ) CREATE TABLE借阅( 图书编号 CHAR(10), 读者编号 CHAR(10), 借书日期 DATETIME, 还书日期 DATETIME, PRIMARY KEY(图书编号,读者编号,借书日期), FOREIGN KEY(图书编号) REFERENCES 图书(编号), FOREIGN KEY(读者编号) REFERENCES 读者(编号) ) 1、分时问候 set serveroutput on declare v_time number(2); begin v_time := to_char(sysdate,'hh24'); if v_time >= 6 and v_time <= 8 then dbms_output.put_line('起床。'); elsif v_time > 8 and v_time < 17 then dbms_output.put_line('工作'); elsif v_time >= 18 and v_time <= 22 then dbms_output.put_line('下班'); else dbms_output.put_line('睡觉'); end if; end; 2、求和 declare v_x number; v_sum number; begin v_sum:=0; v_x:=1; loop v_sum:=v_sum+v_x; v_x:=v_x+1; if v_x>100 then exit; end if; end loop; dbms_output.put_line(v_sum); end;