大型数据库技术-样题(2)(2)(1).docx

四、简答题样题: 1.How to connect remote oracle server by SQL*PLUS? Please write down the steps and the operating statements? 如何使用SQL*PLUS连接远程oracle服务器?请写下操作步骤和操作说明? 方法一: 1).在开始菜单在,找到SQL PLUS.双击SQL PLUS 2).在弹出的SQL PLUS,输入数据库实例的用户名何密码,按enter键 3). 如果oracle服务器中装有多个数据库实例,则在用户名处输入:用户名/密码@数据库名称。如果数据库服务器不在本机上,还需要加上数据库服务器的地址:用户名/密码@IP地址/数据库名称。 方法二: 在开始-运行,输入cmd。弹出的黑色框中输入:sqlplus 用户名/密码@IP地址/数据库名称。 2.What is the difference between procedures and functions in the Oracle database? Oracle数据库中的过程和函数有什么不同? 1). 函数必须有返回值,存储过程可以没有返回值 2). 函数可以单独执行,存储过程必须通过execute执行 3). 函数可以嵌入SQL中执行,而存储过程不行 3.读懂如下程序: CREATE OR REPLACE FUNCTION ret_deptinfo( p_deptno dept.deptno%TYPE, p_num OUT NUMBER, p_max OUT NUMBER) RETURN dept.dname%TYPE AS v_dname dept.dname%TYPE; BEGIN SELECT dname INTO v_dname FROM dept WHERE deptno=p_deptno; SELECT count(*),max(sal) INTO p_num,p_max FROM emp WHERE deptno=p_deptno; RETURN v_dname; END ret_deptinfo; 分析程序实现的功能: 定义一个函数,以部门号位参数,返回dept表该部门的人数和最高工资。 4.输入和运行以下程序: CREATE OR REPLACE TRIGGER CHECK_SAL BEFORE UPDATE ON emp FOR EACH ROW BEGIN IF :new.job=CLERK AND (:new.sal500 OR :new.sal1000) THEN RAISE_APPLICATION_ERROR(-20001, 工资修改超出范围,操作取消!); END IF; END; 分析程序实现的功能: 为emp表创建一个触发器,当更新员工工资时,如果新员工的工作是CLERK 并且新员工工资小于500或大于1000时,显示工资修改超出范围,操作取消! 五、设计题样题: 1、创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号、员工名。并且调用该存储过程,要求根据输入部门编号,查询平均工资及输出比平均工资高的员工号、员工名。 CREATE OR REPLACE PROCEDURE show_emp( p_deptno emp.deptno%TYPE) AS v_sal emp.sal%TYPE; BEGIN SELECT avg(sal) INTO v_sal FROM emp WHERE deptno=p_deptno; DBMS_OUTPUT.PUT_LINE(p_deptno|| ||average salary is: ||v_sal); FOR v_emp IN (SELECT * FROM emp WHERE deptno=p_deptno AND salv_sal) LOOP DBMS_OUTPUT.PUT_LINE(v_emp.empno|| ||v_emp.ename); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(The department doesn’’t exists!); END show_emp; 过程调用语句: declare vdeptno emp.detpno%type; Begin vdeptno:=deptno; show_emp(vdeptno); End; 2、创建一个函数,以部门号为参数,返回部门名、部门人数及部门平均工资。并且调用该函数,输出所有有员工的部门的名称、部

文档评论(0)

1亿VIP精品文档

相关文档