2012-02-25 42 views
0

假設員工的過期日期定義爲hire_date後的一年。我創建了試圖做這樣的任務的函數:選擇每個員工的過期日期

create or replace expiredate(empno in number) return date is 
    hiredate employees.hire_date%type; 
begin 
    select add_months(e.hire_date,12) into hiredate 
    from employees e 
    where empno is not null; 
    return hiredate; 
    end expiredate; 

但它顯示了許多錯誤,比如:

Error starting at line 1 in command: 
create or replace expiredate(empno in number) return date is 
hiredate employees.hire_date%type 
Error at Command Line:1 Column:23 
Error report: 
SQL Error: ORA-00922: missing or invalid option 
00922. 00000 - "missing or invalid option" 
*Cause:  
*Action: 

Error starting at line 3 in command: 
begin 
select add_months(e.hire_date,12) into hiredate 
from employees e 
where empno is not null; 
return hiredate; 
end expiredate; 
Error report: 
ORA-06550: line 4, column 7: 
PL/SQL: ORA-00904: "EMPNO": invalid identifier 
ORA-06550: line 2, column 1: 
PL/SQL: SQL Statement ignored 
ORA-06550: line 5, column 1: 
PLS-00372: In a procedure, RETURN statement cannot contain an expression 
ORA-06550: line 5, column 1: 
PL/SQL: Statement ignored 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

我認爲錯誤的主要思想是太多行的錯誤,但我怎樣才能糾正這個代碼?

回答

1

您的create聲明中存在語法錯誤,您放入的select沒有意義。

嘗試以下操作:

create or replace function expiredate(empno in number) 
    return date is 
    hiredate employees.hire_date%type; 
begin 
    select add_months(e.hire_date,12) into hiredate 
    from employees e 
    where e.empno = empno; 
    return hiredate; 
end expiredate; 
/

結果:

SQL> create table employees (hire_date date); 

Table created. 
SQL> create or replace function expiredate(empno in number) 
return date is 
hiredate employees.hire_date%type; 
begin 
    select add_months(e.hire_date,12) into hiredate 
    from employees e 
    where e.empno = empno; 
    return hiredate; 
end expiredate; 
/2 3 4 5 6 7 8 9 10 

Function created. 

SQL> insert into employees values (1, SYSDATE); 

1 row created. 

SQL> select * from employees; 

    EMPNO HIRE_DATE 
---------- ------------------ 
    1 25-FEB-12 

SQL> select expiredate(1) from dual; 

EXPIREDATE(1) 
------------------ 
25-FEB-13 
+0

我已經忘了功能不幸的是,由於@Mat – 2012-02-25 09:48:52

相關問題