PL / SQL函数作业

时间:2016-07-29 19:24:11

标签: oracle stored-procedures plsql

是否可以在PL / SQL函数中加入查询?使用连接时,我的函数无法正确编译。有没有其他方法可以解决这个问题?

问题

为三个规则中的每个规则创建一个PL / SQL函数。该函数接受一个参数AppID,并返回0 - Not Acceptable或1 - Acceptable

申请人(SSN,FirstName,LastName,DOB)
学院(AcadID,AcadName)
申请(AppID,SSN,AcadID,年)
MEDICAL_RECORDS(SSN,Pulse,收缩压,舒张压,DateUpdated)
EVAL_RULES(RuleID,FunctionName)
评估(EvalID,EvalDate,AppID)
结果(EvalID,RuleID,结果)

功能规则

年龄:

  1. 16< = age< = 22和(USAFA或USMA) - “可接受”
  2. 16< = age< = 40和USUHS - “可接受”
  3. 否则 - “不可接受”
  4. 脉冲:

    1. 脉冲< 45 - “不可接受”
    2. 45< = Pulse< = 99 - “可接受”
    3. 脉冲> 99 - “不接受”
    4. 血压:

      1. 收缩压< 140和舒张压< 90 - “可接受”
      2. 收缩期> = 140或舒张期> = 90 - “不可接受”

1 个答案:

答案 0 :(得分:0)

以下是针对AGE的第一组规则的实现。这是未经测试的。

create or replace function validate_age
   ( p_app_id in applications.appid%type)
   return varchar2
is
    cursor appcur (p_id applications.appid%type) is
        select apt.dob
               , aca.acadname
        from applications app
             join applicants apt on app.ssn = apt.ssn
             join academies aca on app.acadid = aca.acadid;
    apprec appcur%rowtype;    
    return_value varchar2(20);
    age number;
begin
    open appcur(p_app_id);
    fetch appcur into apprec;
    -- basic error handling
    if appcur%notfound then
        raise_application_error(-20000, 'Invalid Application number ['|| p_app_id ||']');
    end if;
    -- age = whole number of years between now and date of birth
    age := trunc(months_between(sysdate, apprec.dob)/12);

    if (age between 16 and 22 and apprec.acadname in ('USAFA', 'USMA'))
    then 
        return_value:= 'Acceptable';
    elsif (age between 16 and 40 and apprec.acadname in ('USUHS'))
    then 
        return_value:= 'Acceptable';
    else
        return_value:= 'Not Acceptable”';
    end if;

    close appcur;
    return return_value;
end validate_age;
/

扩展此模板以处理其他规则应该是小菜一碟。

记得在交作业时承认StackOverflow!