create or replace function check_depname(dep_id varchar2)
return integer
is
int_value integer;
var_id varchar2(20);
begin
select DEPTNO into var_id from department where deptno = dep_id;
if var_id is not null then  --去掉and var_id <> ''这个条件判断
int_value:=1;
else
int_value:=0;
end if;return int_value;
exception
when NO_DATA_FOUND then
return 2;
end check_depname;

解决方案 »

  1.   

    var_id 存在且不为空的时候,var_id <> '' 这个条件判断起到的作用和你预计的不一样
    可以尝试一下
    select 1 from dual where 1 <> ''; 
    取得的是空
      

  2.   

    如果手头上有plsql, 用plsql 调试一下,确定select DEPTNO into var_id from department where deptno = dep_id 取到值了
    或者:
    set serverout on ;create or replace function check_depname(dep_id varchar2)
    return integer
    is
    int_value integer;
    var_id varchar2(20);
    begin
    select DEPTNO into var_id from department where deptno = dep_id;
    DBMS_OUTPUT.PUTLINE('var_id的值':||var_id);  --输出var_id
    if var_id is not null then --去掉and var_id <> ''这个条件判断
    int_value:=1;
    DBMS_OUTPUT.PUTLINE('进入 var_id = 1 ');  
    else
    int_value:=0;
    DBMS_OUTPUT.PUTLINE('进入 var_id = 0 ');  
    end if;return int_value;
    exception
    when NO_DATA_FOUND then
    return 2;
    end check_depname;察看输出语句,看是在哪一步出现了问题
      

  3.   

    我用TOAD工具,单独执行select 语句没有问题,而且把你上面的内容拷到TOAD工具后,出现编译错误。
      

  4.   

    不好意思,拷贝错了,下面的应该没有问题
    create or replace function check_depname(dep_id varchar2)
    return integer
    is
    int_value integer;
    var_id varchar2(20);
    begin
    select DEPTNO into var_id from department where deptno = dep_id;
    DBMS_OUTPUT.PUTLINE('var_id的值:'||var_id); --输出var_id
    if var_id is not null then --去掉and var_id <> ''这个条件判断
    int_value:=1;
    DBMS_OUTPUT.PUTLINE('进入 var_id = 1 ');
    else
    int_value:=0;
    DBMS_OUTPUT.PUTLINE('进入 var_id = 0 ');
    end if;return int_value;
    exception
    when NO_DATA_FOUND then
    return 2;
    end check_depname;
      

  5.   

    还是不行!主要是在这句出问题了:          DBMS_OUTPUT.PUTLINE (var_id);
      

  6.   

    :( ,连续拼写错误,没有环境真是不方便啊
    DBMS_OUTPUT.put_line()
      

  7.   

    SQL> create table department (
      2  DEPTNO varchar2(20), name varchar2(20));
    表已创建。SQL> insert into department values('1','test1');
    已创建 1 行。SQL> create or replace function check_depname(dep_id varchar2)
      2  return integer
      3  is
      4  int_value integer;
      5  var_id varchar2(20);
      6  begin
      7  select DEPTNO into var_id from department where deptno = dep_id;
      8  DBMS_OUTPUT.PUT_LINE('var_id的值:'||var_id); --输出var_id
      9  if var_id is not null then --去掉and var_id <> ''这个条件判断
     10  int_value:=1;
     11  DBMS_OUTPUT.PUT_LINE('进入 var_id = 1 ');
     12  else
     13  int_value:=0;
     14  DBMS_OUTPUT.PUT_LINE('进入 var_id = 0 ');
     15  end if;
     16
     17  return int_value;
     18  exception
     19  when NO_DATA_FOUND then
     20  return 2;
     21  end check_depname;
     22  /函数已创建。SQL> select check_depname('1') from dual;
    CHECK_DEPNAME('1')
    ------------------
                     1确实没有问题啊?
      

  8.   

    潇潇:
        我知道是怎么回事了!
        你别生气啊!
        那个表的数据类型是DEPTNO char(10)
        :)