2
DB2/AS400에서 작동하지 못하는 쿼리가 있습니다.DB2 쿼리 함수가 매개 변수로 작동하지 않습니다.
select integer(score(ADRLIN1, :param1)*100) as RELEVANCEADR,
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE
where contains(ADRLIN1, :param2) = 1
and pstcod like :param3
order by RELEVANCEADR desc
위의 쿼리를 실행하고 매개 변수에 값을 입력하려고하면 [SQL0418] 매개 변수 표식이 유효하지 않습니다.
큰 문제는 아닙니다. Google 검색은 매개 변수를 사용하기 전에 매개 변수를 작성하라는 메시지를 표시했습니다. 그래서 나는이에 쿼리를 변경 : 다음 값으로
select integer(score(ADRLIN1, CAST(:param1 AS CHAR))*100) as RELEVANCEADR,
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE
where contains(ADRLIN1, CAST(:param2 AS CHAR)) = 1
and pstcod like :param3 order by RELEVANCEADR desc
:
- PARAM1 -> 19 EDGEWOOD BLVD
- PARAM2 -> 19 EDGEWOOD BLVD
- 3 당겨 - > % 68046 %
그리고 결과가 비어 있습니다. , 실제로 리터럴로 쿼리를 채우면 쿼리가 작동합니다.
select integer(score(ADRLIN1, '19 EDGEWOOD BLVD')*100) as RELEVANCEADR,
ADRLIN1, PSTCOD from MYSCHEMA.MYTABLE
where contains(ADRLIN1, '19 EDGEWOOD BLVD') = 1
and pstcod like '%68046%'
order by RELEVANCEADR desc
위의 쿼리는 유효한 레코드를 반환합니다.
제 질문은 어떻게 점수를 얻을 수 있으며 하드 코딩 된 문자열 대신 매개 변수로 전달할 작업 기능이 포함되어 있습니까?
코드에'param1'과'param2'가 있습니다. 둘 모두에 동일한 문자열을 전달하고 있습니까? –
@GordonLinoff 예, 'param2'를 'param1'로 바꾸어도 동일한 문자열이 전달되도록하더라도 결과 집합은 비어 있습니다. – ThatGuyYouKnow
'CHAR'은'CHAR (1)'과 동일하므로 모든 입력 값이 잘립니다. 전송할 때 실제 데이터 유형을 사용하십시오. – mustaccio