CREATE OR REPLACE FUNCTION get_enosal1(empno1 number,job1 out varchar2,comm1 out number)
RETURN NUMBER AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal,job,comm INTO v_sal,job1,comm1 FROM emp
WHERE empno:=empno1;
RETURN(v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error(-20000,'该员工不存在!');
END get_enosal1;
/
代码如上 能编译
但是调用时候就出错
RETURN NUMBER AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal,job,comm INTO v_sal,job1,comm1 FROM emp
WHERE empno:=empno1;
RETURN(v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error(-20000,'该员工不存在!');
END get_enosal1;
/
代码如上 能编译
但是调用时候就出错
var comm number
var job varchar2
exec :sal:=get_enosal1(7499,:job,:comm);
print sal
这是输入内容 7499是一个员工编号
declare
sal number;
comm number;
job varchar2(100);
begin
sal:=get_enosal1(7499,job,comm);
dbms_output.put_line(sal);
end;
/
这个格式...不是在oracle中调用?
这种写法是赋值,
用于条件判断应该是
empno = empno1
RETURN NUMBER AS
v_sal emp.sal%TYPE;
BEGIN
SELECT sal,job,comm INTO v_sal,job1,comm1 FROM emp
WHERE empno = empno1;
RETURN(v_sal);
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error(-20000,'该员工不存在!');
END get_enosal1; 首先job1,comm1 要和job,comm 类型一致
其次 empno := empno1只赋值,不是sql查询条件 ,修改为empno = empno1
应该是number型的表字段与某变量的类型不匹配。