oracle自定义函数问题

wangzcpp 2010-04-09 07:05:11
刚才用别人的用户发的 分数比较少 重新发一次 分数多一些 急需大家的帮助
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 字段是字符型的

万分感激!
...全文
93 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzcpp 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 phoenix_99 的回复:]
怀疑你的字段为number型
[/Quote]

字型我确认好多变了 是varchar型
wangzcpp 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xieyuooo 的回复:]
呵呵,我不清楚你的数据类型是否有问题,最好把数据类型给大家看下,还有如7楼所说,你干嘛1变0,0变1来回变呢,呵呵,何必呢,不过问题归问题,我唯一看出的问题就是,如果你是ORACLE的话,入参有问题:
v_phoneno IN varchar
请将入参修改为:
v_phoneno IN varchar2

呵呵,你先试试。不知道你ORACLE是什么版本的,高版本的,应该也能支持的了。
[/Quote]

vhar varchar varchar2 这三个类型我都尝试了 还是一样 只有写死的时候才正确 ,传变量就不对
wangzcpp 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ssqtjffcu1 的回复:]
SQL code
楼主把你的代码改成
SELECT DECODE(count(*), 0, 0, 1)
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'……
[/Quote]


这个 我已经改成你这样了 ,我那样确实是麻烦了
ssqtjffcu 2010-04-11
  • 打赏
  • 举报
回复
楼主把你的代码改成
SELECT DECODE(count(*), 0, 0, 1)
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');
下面就不用判断拉,直接返回v_temp2
xieyu_zy 2010-04-11
  • 打赏
  • 举报
回复
呵呵,我不清楚你的数据类型是否有问题,最好把数据类型给大家看下,还有如7楼所说,你干嘛1变0,0变1来回变呢,呵呵,何必呢,不过问题归问题,我唯一看出的问题就是,如果你是ORACLE的话,入参有问题:
v_phoneno IN varchar
请将入参修改为:
v_phoneno IN varchar2

呵呵,你先试试。不知道你ORACLE是什么版本的,高版本的,应该也能支持的了。
Phoenix_99 2010-04-09
  • 打赏
  • 举报
回复
怀疑你的字段为number型
wangzcpp 2010-04-09
  • 打赏
  • 举报
回复
还有个问题自定义函数里 我用to_char 函数为什么不起作用呢 很让我头疼
wangzcpp 2010-04-09
  • 打赏
  • 举报
回复
这条sql得到的值是0 那我的函数返回值应该是1 可是 返回的确是0
wangzcpp 2010-04-09
  • 打赏
  • 举报
回复
尝试过 执行正常
tangren 2010-04-09
  • 打赏
  • 举报
回复
上面的语句执行结果怎么样?
tangren 2010-04-09
  • 打赏
  • 举报
回复
在sqlplus中招待一下这个语句
SELECT DECODE(count(*),0,1,0)
FROM wphonesaleopr a,dcustmsg b
WHERE
a.id_no=b.id_no
and b.phone_no='15714515978'
and a.back_flag in ('0','2')
and a.op_code in('7898','7981');

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧