CREATE OR REPLACE FUNCTION dbcustadm.IsTdPhoneNo(v_phoneno IN varchar)
RETURN NUMBER
IS
--v_temp1 NUMBER;
v_temp2 NUMBER;
BEGIN
-- BEGIN
--SELECT DECODE(substr(v_phoneno,1,3),'157',0,1) INTO v_temp1
-- FROM dual;
-- END;
-- IF(v_temp1=1)
-- THEN RETURN 0;
-- ELSIF(v_temp1=0)
--THEN
SELECT DECODE(count(*),0,1,0) INTO v_temp2
FROM wphonesaleopr a,dcustmsg b
WHERE
a.id_no=b.id_no
and b.phone_no=v_phoneno
and a.back_flag in ('0','2')
and a.op_code in('7898','7981');
-- END IF;
IF(v_temp2=0)
THEN RETURN 1;
ELSIF(v_temp2=1)
THEN RETURN 0;
END IF;
END;
这个执行Select IsTdPhoneNo('15714515978') from dual; 会返回0 可是按理说应该返回1
如果将上面的b.phone_no=v_phoneno 改成b.phone_no=‘15714515978’就会返回1 是我想要的结果初步怀疑b.phone_no=v_phoneno 这个赋值有问题 但是我写成b.phone_no=to_char(v_phoneno) 还是返回0 只有写死的时候才能返回1 请问一下 这是因为什么dcustmsg表的phone_no 字段是字符型的万分感激!
RETURN NUMBER
IS
--v_temp1 NUMBER;
v_temp2 NUMBER;
BEGIN
-- BEGIN
--SELECT DECODE(substr(v_phoneno,1,3),'157',0,1) INTO v_temp1
-- FROM dual;
-- END;
-- IF(v_temp1=1)
-- THEN RETURN 0;
-- ELSIF(v_temp1=0)
--THEN
SELECT DECODE(count(*),0,1,0) INTO v_temp2
FROM wphonesaleopr a,dcustmsg b
WHERE
a.id_no=b.id_no
and b.phone_no=v_phoneno
and a.back_flag in ('0','2')
and a.op_code in('7898','7981');
-- END IF;
IF(v_temp2=0)
THEN RETURN 1;
ELSIF(v_temp2=1)
THEN RETURN 0;
END IF;
END;
这个执行Select IsTdPhoneNo('15714515978') from dual; 会返回0 可是按理说应该返回1
如果将上面的b.phone_no=v_phoneno 改成b.phone_no=‘15714515978’就会返回1 是我想要的结果初步怀疑b.phone_no=v_phoneno 这个赋值有问题 但是我写成b.phone_no=to_char(v_phoneno) 还是返回0 只有写死的时候才能返回1 请问一下 这是因为什么dcustmsg表的phone_no 字段是字符型的万分感激!
改成 and TRIM(b.phone_no) = v_phoneno
试试