ITPub博客

首页 > 数据库 > Oracle > 2011-11-28 取单行数据

2011-11-28 取单行数据

Oracle 作者:hanaka 时间:2019-12-19 16:00:59 0 删除 编辑

http://www.itpub.net/thread-1499223-20-1.html

194楼


plch_employees表有一个单列主键employee_id。我需要写一个函数,声明如下:

FUNCTION plch_one_employee (
   employee_id_in IN PLS_INTEGER)
   RETURN plch_employees%ROWTYPE

它有如下行为:

1. 如果传入函数的员工ID是NULL, 抛出VALUE_ERROR异常;

2. 如果找不到这个员工,抛出NO_DATA_FOUND异常。


哪些选项符合需求?


(A)

IS
   l_return   plch_employees%ROWTYPE;
BEGIN
   SELECT *
     INTO l_return
     FROM plch_employees
    WHERE employee_id = employee_id_in;
   RETURN l_return;
END plch_one_employee;

(B)

IS
   CURSOR one_emp_cur
   IS
      SELECT *
        FROM plch_employees
       WHERE employee_id = employee_id_in;
   l_return   one_emp_cur%ROWTYPE;
BEGIN
   OPEN one_emp_cur;
   FETCH one_emp_cur INTO l_return;
   CLOSE one_emp_cur;
   RETURN l_return;
END plch_one_employee;

(C)

IS
   l_return   plch_employees%ROWTYPE;
BEGIN
   IF employee_id_in IS NULL
   THEN
      RAISE VALUE_ERROR;
   END IF;
   SELECT *
     INTO l_return
     FROM plch_employees
    WHERE employee_id = employee_id_in;
   RETURN l_return;
END plch_one_employee;

(D)

IS
   CURSOR one_emp_cur
   IS
      SELECT *
        FROM plch_employees
       WHERE employee_id = employee_id_in;
   l_return   one_emp_cur%ROWTYPE;
BEGIN
   IF employee_id_in IS NULL
   THEN
      RAISE VALUE_ERROR;
   END IF;
   OPEN one_emp_cur;
   FETCH one_emp_cur INTO l_return;
   IF one_emp_cur%NOTFOUND
   THEN
      CLOSE one_emp_cur;
      RAISE NO_DATA_FOUND;
   ELSE
      CLOSE one_emp_cur;
      RETURN l_return;
   END IF;
END plch_one_employee;


答案说明在197楼

2011-11-28答案CD, 楼上都答对了。注意用FETCH游标的方法,即使没有数据也不会报NO_DATA_FOUND错误。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/680385/viewspace-2669495/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-07-15

  • 博文量
    47
  • 访问量
    29232