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;
    /
代码如上 能编译
但是调用时候就出错 

解决方案 »

  1.   

    var sal number
    var comm number
    var job varchar2
    exec :sal:=get_enosal1(7499,:job,:comm);
    print sal
    这是输入内容 7499是一个员工编号
      

  2.   

    set serveroutput on;
    declare 
       sal number; 
       comm number;
       job varchar2(100);
    begin
       sal:=get_enosal1(7499,job,comm); 
       dbms_output.put_line(sal);
    end;
    /
      

  3.   


    这个格式...不是在oracle中调用?
      

  4.   

    WHERE empno:=empno1; 这个写法不对吧改成where empno = empno1;
      

  5.   

    empno:=empno1;
    这种写法是赋值,
    用于条件判断应该是
    empno = empno1
      

  6.   

    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; 首先job1,comm1 要和job,comm 类型一致
    其次 empno := empno1只赋值,不是sql查询条件 ,修改为empno = empno1
      

  7.   

    你的empno1 参数好像没有指定IN或者OUT类型哦
      

  8.   

      冒昧的问句, 你写的是储过程么  怎么是 function !  
      

  9.   

    数据类型不匹配,必须是这样的
    应该是number型的表字段与某变量的类型不匹配。