如下所示:
--包的定义
CREATE PACKAGE sp_package IS--创建一个包
   procedure updatesal_pro(emp_id number,newsal number);--包里面有一个过程
   function  updatesal_fun(emp_id number)return number;--包里面还有一个函数
END; 
--包体的定义和实现
CREATE OR REPLACE PACKAGE BODY sp_package IS
  procedure updatesal_pro(emp_id number,new sal number)--过程的实现
    IS
    BEGIN
      update l set salary=newsal where employee_id=emp_id;
      --dnms_output.put_line(newsal);
    END;
  function updatesal_fun(emp_id number)return number is--函数的实现
    sum_sal number;
    BEGIN
      select nvl2(commission_pct,(salary+commission_pct)*12,salary*12) from l where employee_id=emp_id;
      return sum_sal;
    END;
  END;
--调用过程
DECLARE
  v_newsal l.salary%TYPE;
  v_sumsal l.salary%TYPE;
BEGIN
  v_newsal:=sp_package.updatesal_pro(111,5000);
   dbms_output.put_line(v_newsal);
  v_sumsal:=sp_package.updatesal_fun(111);
  dbms_output.put_line(v_sumsal);
END;
我这样子调用之后,什么结果都没有输出,而且也不报错,各位高手帮帮忙 怎么调用啊,
顺带说句我用的环境是developer,最好把如何在命令行和窗体中调用的两种都给说下,
谢谢了

解决方案 »

  1.   

    developer的输出在 第二个sheet上
    第一个sheet SQL
    第二个sheet Output
    第三个sheet Statisticssqlplus的话,需要先 set serveroutput on
      

  2.   

    sqlplus: 先调用set serverouput on
    sql developer: 先到右下的DBMS OUTPUT那个TAB上,点下Enable DBMS Output那个图标。输出也在这个TAB上。
      

  3.   

    v_newsal:=sp_package.updatesal_pro(111,5000);
    updatesal_pro是个过程,怎么会有返回值呢?function updatesal_fun(emp_id number)return number is--函数的实现
      sum_sal number;
      BEGIN
      select nvl2(commission_pct,(salary+commission_pct)*12,salary*12) from l where employee_id=emp_id;  return sum_sal;
      END;是
    select nvl2(commission_pct,(salary+commission_pct)*12,salary*12) into sum_sal from l吧?
      

  4.   

    这点写错了,习惯性的写了这个,呵呵,还有就是有两个拼写错误,也改正了,就不解释了~~~
    过程的调用可以这样子吗select sp_package.updatesal_pro(111,5000)from dual;
    我知道函数的调用可以,过程的可以吗?
      

  5.   

    过程不可以,因为没有返回值。
    可以这样
    begin sp_package.updatesal_pro(111,5000);end;