9、完成以下PL/SQL块,功能是:使用游标显示销售报表。如果目标销售额(tsales)大于实际销售额(asales),则显示消息“需提高销售额”。如果tsales等于asales,则显示消息“已达到销售额”,否则显示消息“销售业绩出色” DECLARE
CURSOR sales_cur IS SELECT * FROM salesdetails; BEGIN For sales_res in sales_cur loop
IF sales_rec.tsales > sales_rec.asales THEN
DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||' 需提高销售额'); ELSE IF sales_res.tsales=sales_res.asales THEN
DBMS_OUTPUT.PUT_LINE('产品:'||sales_rec.pid||'已达到销售额'); ELSE DBMS_OUTPUT.PUT_LINE('产品:' ||sales_rec.pid||' 销售业绩出色'); END IF; END IF; END LOOP; END;
10、完成以下PL/SQL块,功能是:创建一个交换两数的过程。 CREATE OR REPLACE PROCEDURE
swap(p1 IN OUT NUMBER, p2 in out NUMBER) IS v_temp NUMBER; BEGIN v_temp := p1; p1 := p2; p2 := v_temp; END;
11、完成以下PL/SQL块,功能是:创建一个函数dept_name,其功能是接受职员编号后
返回职员所在部门名称。(注:部门名称在dept表中,而职员信息在emp表中,职员所在部门号的列名为deptno)
CREATE OR REPLACE FUNCTION dept_name (emp_no NUMBER) RETURN VARCHAR2 AS dept_no NUMBER(2); result dept.dname%TYPE; BEGIN Selecet deptno into dept_no from emp where
empno=emp_no
SELECT dname INTO result FROM dept
WHERE deptno = dept_no; Return result EXCEPTION WHEN OTHERS THEN RETURN NULL; END;
12、要执行pack_me包中的order_proc过程(有一个输入参数),假设参数值为?002?,可以输入以下命令:
EXECUTE pack_ma.order-proc(‘002’)
13、完成以下PL/SQL块的功能是:创建一个触发器biu_job_emp,无论用户插入记录,还是修改EMP表的job列,都将用户指定的job列的值转换成大写。 CREATE OR REPLACE TRIGGER biu_job_emp
Before insert or update of job on emp For each row BEGIN :NEW.job :=upper(;new.job) END; 答
案 1.A 6.B 11.C 16.C 21.C 26.A 2.D 7.B 12.C 17.D 22.C 27.A 3.C 8.C 13.A 18.B 23.C 28.A 4.A 9.B 14.B 19.A 24.A 29.B 5.B 10.C 15.D20.B 25.A 30.C
二、填空题(每空2分,共40分) [1] Connect martin/martinpass@aptech [2] Grant select on scott.emp to martin [3] Select * from employee where 1=2 [4] To_char [5] NVL
[6] even_number [7] 1..25
[8] SELECT ename INTO empname FROM employee WHERE empno=eno; [9] EXCEPTION [10] OPEN toy_cur
[11] FETCH toy_cur INTO my_toy_price; [12] FOR sales_rec IN sales_cur LOOP [13] sales_rec.tsales = sales_rec.asales [14] IN OUT
[15] SELECT deptno INTO dept_no FROM emp WHERE empno=emp_no;
[16] RETURN result;
[17] pack_ma.order_proc(‘002’)
[18] BEFORE INSERT OR UPDATE OF job ON emp [19] FOR EACH ROW [20] UPPER(:NEW.job)