我创建了一个函数,如下
create or REPLACE FUNCTION chenweishuai
(empno2 in number,job2 out varchar2) return varchar2
as
nametext emp.ename%type;
begin
select ename,job into nametext,job2 from emp where upper(empno)= upper(empno2);
return nametext;
EXCEPTION
when no_data_found then
 raise_application_error(-20000,'Current Employee is not exists');
end;
然后在下面调用
DECLARE 
empno2text emp.ename%type;
job2text varchar2(200);
begin
empno2text :=chenweishuai(8888,job2text);
dbms_output.put_line(empno2text||' '||job2text);
end;
但是为什么会报参数类型或个数错误呢,我检查了好几遍,个数两个,类型一个number,一个varchar2,没什么问题啊?到底什么原因,好心人给解答下,谢了exceptionfunction

解决方案 »

  1.   

    你的函数编译完有没有报错啊,估计是函数有问题,而不是调用的问题
    select ename,job into nametext,job2 from emp where upper(empno)= upper(empno2);
    这里边你查询ename和job2干什么,没用吧
    改成
    select job into nametext from emp where upper(empno)= upper(empno2);函数创建完成后,打开导航树看一下前面有没有差号,有的话代表编译没通过
      

  2.   

    函数编译好后,运行:select * from user_errors;
      

  3.   

    改完之后,把job赋给name?这不科学
    nametext本就是一个硬编码,建议使用SUBTYPE会使程序更健壮