专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

数据库笔试面试104——在Oracle中,判断程序能否执行?

ins518 2024-11-02 12:51:21 技术文章 9 ℃ 0 评论

题目如下所示:

假定SERV表有a、b、c三个字段:SERV(a number(10),b number(10),c number(10))。表SERV的内容如下:

a

b

c

1

10

70

2

30

50

1

10

80

以下两段PL/SQL的功能是根据a的值,查找出对应b的值赋予变量x,请分别判断这两段PL/SQL是否能正常执行,若不能正常执行,请指出错误的原因并修改。

(1)

  1. declare

  2. x number;

  3. begin

  4. select b into x from serv where a=1;

  5. dbms_output.put_line(to_char(x));

  6. end;

(2)

  1. declare

  2. x number;

  3. begin

  4. select b into x from serv where a=2;

  5. dbms_output.put_line(to_char(x));

  6. end;

答案如下所示:

这2段程序除了WHERE语句后的值不同以外,其它均一样。对于程序(1),当a=1时,返回了2行记录,对于程序(2),当a=2时,返回了1行记录。对于变量x而言,只能接受一个值,所以,程序2执行不报错,程序(1)执行报错:ORA-01422: exact fetch returns more than requested number of rows。

对于程序(1)有2种修改方法,第一种就是将“select b into x from serv where a=1;”修改为“select distinct b into x from serv where a=1;”。第二种方法就是返回集合类型,修改后的程序块如下所示:

  1. DECLARE

  2. VARCURSOR SYS_REFCURSOR;

  3. X SERV%ROWTYPE;

  4. BEGIN

  5. OPEN VARCURSOR FOR

  6. SELECT T.* FROM SERV T WHERE A=1;

  7. LOOP

  8. FETCH VARCURSOR

  9. INTO X;

  10. EXIT WHEN VARCURSOR%NOTFOUND;

  11. DBMS_OUTPUT.PUT_LINE(R.B);

  12. END LOOP;

  13. END;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表