2011-10-03 1 views
2

기본 사용자 프로파일이 CCSID 65535를 사용하기 때문에 데이터를 올바르게 변환하지 못하는 iSeries Function에 문제점이 있습니다. CCSID 37 일과 모든 것이 잘 작동합니다.SQL 사용자 정의 Java 함수 (CCSID 65535와 CCSID 1200 사이의 문자 변환이 유효하지 않음)

사용자가 작업 속성을 변경할 필요가없는 솔루션이 필요합니다.

기능은 자바 응용 프로그램을 실행하고 나는 처음 CCSID (37)를 사용하지 않고 그것을 시도하지만,이를 추가하는 것은 미국 영어로 변환하는 매개 변수 강제 시킨다는 게시물을 발견이

CREATE FUNCTION mylib/re_Test2(input VARCHAR(500) CCSID 37, 
           regex VARCHAR(500) CCSID 37) 
RETURNS INTEGER 
EXTERNAL NAME 'UDFs.re_Test' 
LANGUAGE Java 
PARAMETER STYLE Java 
FENCED 
NO SQL 
RETURNS NULL ON NULL INPUT 
SCRATCHPAD 
DETERMINISTIC 

처럼 보인다. 그것은 나를 위해 일하는 것 같지 않습니다.

제안 사항?

STRSQL 및 RPGLE 스크립트에서 실행을 시도했지만 둘 다 작동하지 않지만 SQLSquirrel (ODBC를 사용하는 오픈 소스 SQL 프로그램)에서 작동합니다.

답변

2

CCSID 65535는 '문자 변환 없음'을 의미하므로 테이블이 특정 CCSID로 작성된 경우 해당 CCSID로 응용 프로그램을 실행하는 것이 좋습니다.

+0

현재 sysibm/sysdummy1에서're_test ('a', 'a') 선택과 같은 테스트를 위해 문자열 리터럴을 사용하고 있습니다. 작동하지 않습니다. sysdummy1의 CCSID는 37 – jax

+0

입니다. 작업 CCSID가 65535이면 예상됩니다 ...당신은 ** ** 문자 번역을하지 말라는 시스템을 말하고 있습니다. –

+0

CCSID 65535는 비 변환 용입니다. 그것은 본질적으로 "바이너리"로 정의됩니다 (그리고 나는 왜 그렇게 많이 사용되는지 이해할 수 없습니다). 수신자 CCSID (예 : 37)로 사용되는 것은 ** 처음부터 데이터를 넣는 데 사용 된 것과 정확히 동일한 CCSID 인 ** ** 정상적으로 작동합니다. 그렇지 않은 경우, 시각적 검사를 제외하고는 캐치되지 않는 변환 된 데이터에 오류가 있습니다. 소프트웨어는 오류를 일으키지 않습니다 (CCSID가 변환에 유효하지 않은 경우는 제외). – user2338816

0

당신은 내가 같은 문제가 있었다

SELECT CAST(re_test('a','a') AS VARCHAR(500) CCSID 37) FROM sysibm/sysdummy 
+0

나는 이것이 작동 할 것이라고 확신했다. 그러나 나는 똑같은 문제를 겪었다. – jax

1

처럼 CAST, 뭔가를 사용하여 시도 할 수 있습니다. 함수 매개 변수 (정수가 있음)와 관련이 없다는 것을 알았습니다.

문제는입니다. 예를 들어, 필자의 경우 System i Navigator를 사용하여 호출했지만, RPG 프로그램 (아마도 65535 사용자 CCSID를 사용하는)에서는 작동하지 않습니다.

후자의 경우 CHGJOB CCSID(37) (37은 "유럽 유럽 EBCDIC", 누구든지 choose the proper code page에 해당) 및 CHGJOB CCSID(65535)을 다시 넣습니다.

다른 유사한 방법은 CHGUSRPRF USRPRF(MYUSER) CCSID(37)입니다. 더 나은 것을 찾지 못했습니다 ...

0

위의 선택은 RPG 내에 : INTO 호스트 변수를 넣으려고하면 오류없이 실행됩니다. 해결 방법은 CCSID의 chgjob을 37로 설정 한 다음 Embedded SQL을 실행 한 다음 CCSID를 65535로 다시 변경하십시오. 그러면 올바르게 작동합니다. 더 많은 정보 나 샘플을 원하시면 [email protected]으로 이메일을 보내주십시오. RPG 세계에서 ENCODE/DECODE 함수를 사용하여이 문제를 보았습니다. 감사.

0

사용 간단한 캐스트, 예 CSSID 37 = CSSID 65535,

을 여기서

select cast(campo1 as varchar(500) CCSID 37) from biblioteca.tabla 

DB2

0

솔루션은 다음, 다음, 37 CCSID의 CHGUSRPRF을 임베디드 SQL을 실행하는 것입니다 이례적인 일이다 changejob CCSID를 다시 65535로 변경하십시오.