两段代码,一能执行,二报错ora-01722无效数字,指向NVL,就多了个where条件,Google了一天没找到答案
SELECT bb_get_info_detail_f (1094,
NVL (a.build_id, 0)
) hose_code
FROM bb_service_relation_t a, bb_gsm_service_info_t b
SELECT bb_get_info_detail_f (1094,
NVL (a.build_id, 0)
) hose_code
FROM bb_service_relation_t a, bb_gsm_service_info_t b
WHERE b.product_end_date >= TO_DATE ('2013-05-8', 'yyyy-MM-dd')
AND b.product_end_date < TO_DATE ('2014-02-19', 'yyyy-MM-dd') + 1
AND a.user_id = b.user_id
AND a.if_valid = 1
------解决方案--------------------
这个错应该就是build_id列有数据错误,可能是全角数字什么的,
这个SELECT NVL(build_id, 0) FROM bb_service_relation_t 会不会报错呢
------解决方案--------------------
我估计1不是能执行,而是还没执行到那个报错的无效数字,你应该是没完全展示所有数据。
整一个判断数字的函数,判断一下a.build_id是不是存在空格或者非数字
CREATE OR REPLACE FUNCTION isnumeric (str IN VARCHAR2)
RETURN NUMBER
IS
v_str FLOAT;
BEGIN
IF str IS NULL
THEN
RETURN 0;
ELSE
BEGIN
SELECT TO_NUMBER (str)
INTO v_str
FROM DUAL;
EXCEPTION
WHEN INVALID_NUMBER
THEN
RETURN 0;
END;
RETURN 1;
END IF;
END isnumeric;