Oracle PLSQL查询中的编译错误

Oracle PLSQL查询中的编译错误,oracle,plsql,Oracle,Plsql,我正在使用存储函数从表中查询数据,但它无法正常工作 有人能帮我吗 我不能得到我想要的正确结果 CREATE OR REPLACE FUNCTION diff (empnoinput1 emp.empno%TYPE, empnoinput2 emp.empno%TYPE) RETURN VARCHAR IS ename1 emp.ename%TYPE; ename2 emp.ename%TYPE; date1 DATE; date2 DATE; date_d

我正在使用存储函数从表中查询数据,但它无法正常工作

有人能帮我吗

我不能得到我想要的正确结果

CREATE OR REPLACE FUNCTION diff (empnoinput1 emp.empno%TYPE, empnoinput2 emp.empno%TYPE) RETURN VARCHAR IS
    ename1 emp.ename%TYPE;
    ename2 emp.ename%TYPE;
    date1 DATE;
    date2 DATE;
    date_diff NUMBER;
    return_value VARCHAR;

BEGIN
    SELECT ename INTO ename1 FROM emp WHERE empno = empnoinput1;
    SELECT ename INTO ename2 FROM emp WHERE empno = empnoinput2;
    SELECT hiredate INTO date1 FROM emp WHERE empno = empnoinput1;
    SELECT hiredate INTO date2 FROM emp WHERE empno = empnoinput2;
    IF date1 < date2 THEN
        date_diff := date2 - date1;
        return_value := ename1 || ' ' || date_diff || ' Tage vor ' || ename2;
    ELSE
        date_diff := date1 - date2;
        return_value := ename2 || ' ' || date_diff || ' Tage vor ' || ename1;
    END IF;
    RETURN '1 mistake';
EXCEPTION WHEN NO_DATA_FOUND THEN
    RETURN 'big mistake';
END diff;
/

SELECT diff(7369, 7499) FROM dual;
错误是:

LINE/COL ERROR -------- ----------------------------------------------------------------- 1/87 PLS-00103: Encountered the symbol "(" when expecting one of the following: . @ % ; is authid as cluster order using external character deterministic parallel_enable pipelined aggregate result_cache
这是因为您只将变量return_值声明为VARCHAR。它们必须是VARCHARn,其中n介于1和32767之间

使用VARCHAR2而不是VARCHAR

例如:


警告:函数创建时出现编译错误。从第1行的dual*ERROR中选择diff7369、7499:ORA-06575:包或函数DIFF处于无效状态实际上您没有在任何地方返回“return_value”,所以为什么要使用它???return VARCHAR250 is和return_value VARCHAR250;这就是我所改变的,但仍然是相同的问题。在声明部分提到它,然后重试;在声明中仍然是一样的。警告:函数创建时出现编译错误。从第1行的dual*ERROR中选择diff7369、7499:ORA-06575:程序包或函数DIFF处于无效状态@max.mustermann1:键入show errors function DIFF.,这将为您提供一些更有用的消息。
return_value VARCHAR2(50);