PL/SQL考试题目1、完成以下PL/SQL块,功能是:显示2 到50的25个偶数。
BEGIN
FOR________ IN _________
LOOP
DBMS_OUTPUT.PUT_LINE(even_number*2);
END LOOP
END;
答案:
even_number 1 .. 25
2、完成以下PL/SQL块,功能是:使用游标,显示所有单价低于250元的玩具的单价。
DECLARE
my_toy_price toys.toyprice%TYPE;
CURSOR toy_cur IS
SELECT toyprice FROM toys
WHERE toyprice<250;
BEGIN
______________
LOOP
________________________________________
EXIT WHEN toy_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (toy_cur%ROWCOUNT || '. 玩具单价:' || my_toy_price);
END LOOP;
CLOSE toy_cur;
END;
答案:
OPEN toy_cur FETCH toy_cur INTO my_toy_price;
3、找出emp表中的dept表没有的dept_no 使用Exists方式实现
即改写select * from emp a where a.dept_no not in (select b.dept_no from dept b)
答:
参:
SELECT *
FROM EMP A
WHERE NOT EXISTS
(SELECT 1 FROM DEPT B WHERE A.DEPT_NO = B. DEPT_NO)
4、现有 dept表有字段code,code的数据结构是H.+序号(9位数字)
用户输入的参数:序号为p_num
select t.* from dept t where substr(t.code,3)= p_num;
上面的SQL语句写法是否合理,如不合理请写你优化上面的语句?
答:
参 :select t.* from dept t where t.code= ‘H.’||p_num;
5、有Table1,Table2两表,Table2是Table1的从表,Table1表有字段head_id(主键)和head_name,Table2表有字段Line_id(主键),head_id(外键),line_name,现要求查询统计出有那些hand_name在Table2表中有2条以上的数据。请写出你的SQL语句。
答:
参 :
select t1.head_name, count(1)
from Table1 t1, Table2 t2
where t1. head_id = t2. head_id
group by t1.head_name
having count(1)>2
6、emp表有主键字段empno,现需要查询empno为100的ename,并赋值给变量v_ename,请写出PL/SQL块实现该功能,要求在PL/SQL块中能够捕捉到不存在记录的异常和其它未知异常,并显示出来。
答:
参 :
DECLARE
V_ENAME VARCHAR2(100);
BEGIN
SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO = 100;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('不存在记录');
WHEN OTHERS THEN
dbms_output.put_line('存在其它未知的异常');
END;
7、编写PL/SQL块,用for循环计算20的阶乘
答:
参 :
declare
r number;
begin
r := 1;
for i in 1 .. 20 loop
r := r * i;
end loop;
dbms_output.put_line(r);
end;