select a.*, 2 if_dj_check
from v_sj_corp a
where exists
(select 1
from t_m_corp_corp_stock m, t_corp_stock s1
where a.id = m.id
and a.org = m.org
and a.seq_id = m.seq_id
and s1.id = m.sub_id
and s1.org = m.sub_org
and s1.seq_id = m.sub_seq_id
and (
add_months(sysdate,(-12*16))<to_date(FUN_GET_BORN_YEAR(s1.certificate_no),'YYYY-MM-DD')
)
)
如上sql中关联,执行就会报ORA-06861 文字与字符串格式不匹配,但是单独将s1.certificate_no修改为某一个固定的字符串就能执行,问题出在哪
要么 FUN_GET_BORN_YEAR 有错,要么certificate_no中有错误的日期(比如 YYYY-02-31)。
其实应该在FUN_GET_BORN_YEAR中调用 TO_DATE(),这样可以在 EXCEPTION 中输出出错的 certificate_no。
先用 select FUN_GET_BORN_YEAR(s1.certificate_no) t_corp_stock s1 看看出来的结果是不是都是yyyy-mm-dd的格式