Oracle 包已编译但有错误,命令行不提示错误

创建了一个包,执行成功了但是没报错。但是调用的时候就报错了:

显示包无效。 

然后重新编译包,显示:包已编译,但是有错误。

创建包的PL/SQL如下:

-------创建一个包,这个包里包含一个记录变量deptrec,两个函数和一个过程 
--创建包定义
create or replace package demo_pack
is 
       deptrec dept%rowtype;
       v_sqlcode number;
       v_sqlerr  varchar2(2048);
       function add_dept(
          dept_no number,dept_name varchar2,location varchar2)
          return number;
       function remove_dept(dept_no number)
          return number;
       procedure query_dept(dept_no in number);
end demo_pack;   



--包体
create or replace package body demo_pack 
is 
       flag integer;
       function check_dept(dept_no number)
         return integer;
         
function add_dept(dept_no number,dept_name varchar2,location varchar2)
  return number 
  is 
 begin 
   if check_dept(dept_no)=0 then 
      insert into dept values(dept_no,dept_name,location);
      return 1;
   else 
      return 0;
   end if;
exception 
   when others then 
     v_sqlcode:= sqlcode;
     v_sqlerr := sqlerrm;
     return -1;
end add_dept;

function remove_dept(dept_no number)
  return number
  is 
begin
  v_sqlcode := 0;
  v_sqlerr := null;
  if check_dept(dept_no) =1 then 
    delete from dept where deptno = dept_no;
    return 1;
  else
    return 0;
  end if;
exception 
  when others then
    v_sqlcode := sqlcode;
    v_sqlerr  := sqlerrm;
    return -1;
end remove_dept;


procedure query_dept(dept_no in number)
  is 
begin
  if check_dept(dept_no) =1 then 
     select * into deptrec from dept where deptno=dept_no;
  end if;
end query_dept;


function check_dept(dept_no number)  ---check_dept这个函数是检查dept表里是否存在是否存在符合输入参数的数据 
   return integer
   is 
begin 
   select count(*) into flag from dept where deptno = dept_no;
   if flag >0 then
     flag :=1;
   end if;
   return flag;
end check_dept;

begin 
  v_sqlcode := null;
  v_sqlerr  := null;
end demo_pack;

执行成果,命令行没有任何消息。

调用包:

/* 调用demo_pack包内函数对dept表进行插入,查询和修改操作,并通过demo_pack包中的记录变量deptrec
显示所查询到的数据库信息*/
declare 
   var number;
begin 
  var := demo_pack.add_dept(90,'adminstration','beijing');
  if var = -1 then 
    dbms_output.put_line(demo_pack.v_sqlerr);
  elsif var = 0 then 
    dbms_output.put_line('该部门记录已经存在!');
  else 
    dbms_output.put_line('添加记录成功!');
    demo_pack.query_dept(90);
    dbms_output.put_line(demo_pack.deptrec.deptno||'---'||demo_pack.deptrec.dname||'---'||demo_pack.deptrec.loc);
    var := demo_pack.remove_dept(90);
    if var = -1 then 
      dbms_output.put_line(demo_pack.v_sqlerr);
    else 
      dbms_output.put_line('删除记录成功!');
    end if;
  end if;
end; 

 调用的时候就报错了。

上网百度,找到了一个解决办法:http://luoma.pro/Content/Detail/648?parentId=1 

然后重新编译包,就没有报错了。此时命令行出现如下:

 

再次调用包,就成功了。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值