数字精度太大了?

时间:2015-05-16 21:07:36

标签: oracle plsql

尝试运行pl / sql函数我收到以下错误:

  

发生了算术,数字,字符串,转换或约束错误。例如,如果尝试将值NULL分配给声明为NOT NULL的变量,或者尝试将大于99的整数分配给声明为NUMBER(2)的变量,则会发生此错误。

这是功能:

CREATE OR REPLACE FUNCTION get_service_yrs
  (p_empid IN employees.employee_id%TYPE)
RETURN NUMBER
IS
  v_yrsjh NUMBER(3,2);
  v_yrsemp NUMBER(3, 2);
BEGIN
  SELECT SUM(TRUNC(((end_date-start_date)/365),2))
  INTO v_yrsjh
  FROM job_history
  WHERE employee_id=p_empid;

  IF SQL%NOTFOUND THEN
    v_yrsjh:=0;
  END IF;

  SELECT TRUNC(((sysdate-hire_date)/365), 2)+v_yrsjh
  INTO v_yrsemp
  FROM employees
  WHERE employee_id=p_empid;

  IF SQL%NOTFOUND THEN
    RAISE_APPLICATION_ERROR(-20202, 'Wrong employee id');
  END IF;
  DBMS_OUTPUT.PUT_LINE(v_yrsjh);
  RETURN v_yrsemp;
END get_service_yrs;

它说错误就是第15行。出了什么问题?

1 个答案:

答案 0 :(得分:2)

错误发生在NUMBER(3,2)

我想您希望使用天数,但是您尝试将其置于NUMBER(3,2)数据类型中,并且当天数大于999时会引发错误。

尝试NUMBER(7) v_yrsjhv_yrsemp