在存储过程中有如下sql语句:select decode(id,0,0,id) as id into result_id from tablename where condition = condition_para;我希望实现如下功能:
如果查询到记录,则返回查询到的id字段的值。
如果没有查询到记录,则返回0。我把decode函数改为decode(id,null,0,id),也不能实现。该查询肯定只会返回一条记录,如果有的话,不用担心into的问题。id的类型是int。希望各位大虾能提供一个解决方案,谢谢先。

解决方案 »

  1.   

    把decode(id,0,0,id)换成nvl(id,0)试试
    还有decode(id,0,0,id)没有意义呀.
      

  2.   

    好像也不行。
    decode是没有意义。
    我还是考虑用异常来做算了,查两次开销就大了。
    还是谢谢了。
      

  3.   

    应该没问题吧,我这里试是没问题:
    CREATE TABLE TABLE1(ID INT,condition VARCHAR2(10));
    INSERT INTO TABLE1 VALUES(1,'A');
    INSERT INTO TABLE1 VALUES(2,'B');
    INSERT INTO TABLE1(condition) VALUES('C');
    COMMIT;create or replace procedure MYPROCDURE(condition_para varchar2) as
    result_id INT;
    begin
    select NVL(id,0) as id into result_id from TABLE1 where condition = condition_para;
    dbms_output.put_line(result_id);
    end;
    /
    SQL> set serveroutput on
    SQL> EXEC MYPROCDURE('A');
    1PL/SQL 过程已成功完成。SQL> EXEC MYPROCDURE('C');
    0PL/SQL 过程已成功完成。
      

  4.   

    是否可以考虑把select的结果集放入一个游标中(最多就是一条数据和没有数据)?
    用游标判断如果有数据就把值赋给result_id,如果没有数据的话result_id就为0可否这样?
      

  5.   

    to 79bo(山芋):
    我的意思是EXEC MYPROCDURE('D'),查询根本不存在的行,然后返回0。to mantisXF(枫の叶):
    就几句话,我不想用游标。还是决定用异常了,结贴了,谢谢大家。