CREATE FUNCTION BRAS.FUN_GET_BLACKLIST_STAT(p_i_date1 VARCHAR,p_i_date2 VARCHAR,p_i_organ VARCHAR, p_i_type VARCHAR)
RETURNS int
BEGIN ATOMIC
declare v_result int;
declare v_organ VARCHAR(10);
set v_result = 0;
IF p_i_organ='00000001' THEN
set v_organ='';
ELSE
set v_organ=p_i_organ;
END IF;
IF p_i_type='EXP_DATE' THEN
set v_result = (select count(*) from (select distinct t.ACC_NO from BRAS.BLACK_STAT t where t.NEW_EXP_DATE>=p_i_date1 AND t.NEW_EXP_DATE<=p_i_date2 AND t.ACC_NO LIKE v_organ || '%') t1 );
END IF;
IF p_i_type='BLACK_DATE' THEN
set v_result = (select count(*) from (select distinct t.ACC_NO from BRAS.BLACK_STAT t where t.BLACK_DATE>=p_i_date1 AND t.BLACK_DATE<=p_i_date2 AND t.ACC_NO LIKE v_organ || '%') t1);
END IF;
IF p_i_type='MODI_DATE' THEN
set v_result = (select count(*) from (select distinct t.ACC_NO from BRAS.BLACK_STAT t where t.MODI_DATE>=p_i_date1 AND t.MODI_DATE<=p_i_date2 AND t.ACC_NO LIKE v_organ || '%') t1);
END IF;
IF p_i_type='TRAN_DATE' THEN
set v_result = (select count(*) from (select distinct t.ACC_NO from BRAS.BLACK_STAT t where t.TRAN_DATE>=p_i_date1 AND t.TRAN_DATE<=p_i_date2 AND t.ACC_NO LIKE v_organ || '%') t1);
END IF;
return v_result;
END@
DB21034E 该命令被当作 SQL
语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:
SQL0132N LIKE 谓词或 POSSTR
标量函数无效,因为第一个操作数不是字符串表达式或第二个操作数不是字符串。LOCATE
或 POSITION 标量函数无效,因为第一个操作数不是字符串,或者第二个操作数不是字符串
表达式。 LINE NUMBER=16. SQLSTATE=42824
------解决方案--------------------------------------------------------
BLACK_STAT 表中 ACC_NO 字段类型是什么? 是字符型吗? 如果是数字型则不可能用 like
------解决方案--------------------------------------------------------
like关键字附近字段类型不匹配
------解决方案--------------------------------------------------------
用变量的时候是不是应该在变量名前加:啊?
------解决方案--------------------------------------------------------
END@
是什么意思?
------解决方案--------------------------------------------------------
NEW_EXP_DATE,TRAN_DATE 这两字段是什么类型?
------解决方案--------------------------------------------------------
错误提示是字段转换错误,你查查哪些字段类型没对上吧