2017-01-02 3 views
0

나는 작은 저장 프로 시저가 저장 프로 시저 :이 프로 시저를 호출 할 때"잘못된 번호 예외 : 유효하지 않은 번호 : 유효한 숫자 문자열을하지"전화

CREATE PROCEDURE "XYZ"."TEST" (
    IN KKK_ID NVARCHAR(12), 
    IN START_DATE SECONDDATE, 
    IN END_DATE SECONDDATE, 
    IN INTER INTEGER 
) 
    SELECT 
     *, 
     ROW_NUMBER() OVER(ORDER BY "DATES") AS "INDEXX" 
    FROM "XYZ::DATA" 
    WHERE 
     "DATES" >= :START_DATE 
     AND 
     "DATES" <= :END_DATE 
     AND 
     "ID" = :KKK_ID 
    ORDER BY "DATES"; 

을, 나는이 오류를 받고 있어요 메시지 :

CALL "XYZ"."TEST"('DE666', '2014-01-01', '2015-12-31', 2234); 

잘못된 번호 예외 : 유효하지 않은 번호 : 유효한 번호 문자열 'DE666'

하지만 'D666'은 문자열처럼 보입니다. 적어도 나를 위해. 여기서 뭐가 틀린거야?

추 신 : id은 예약어가 아닙니다.

+0

@a_horse_with_no_name 실제로 이것은 오류를 정확히 지적하려는 시도였습니다. 다시 'seconddate'또는 다른 오류 메시지로 변경하면 오류 메시지가 동일합니다. – Tobias

+0

@ GurwinderSingh, 아니요, varchar (33) 유형이 – Tobias

+1

입니다. 오류 메시지는 문자열 'DE666' 유효한 숫자가 아니며 문자열이 아닙니다. 왜 그것이 그것을 숫자로 취급하려고하는지에 관해서는, 나는 모른다. 아마도 ""XYZ :: DATA ""ID "'는 숫자입니까? – melpomene

답변

1

좋아, 오류 메시지가 " 'DE666'는 유효한 문자열이 아닙니다."는 말을하지 않는 무엇 말하는 것은 " 'DE666'은 (는) 유효한 문자열이 아닌". 즉, HANA에이 문자열은 숫자의 유효한 문자열 표현이 아닙니다. 유효한 표현은 숫자로 변환 할 수있는 표현입니다 (예 : '1', '2.34', '4,323,252.2354'등 문자열에서 'DE'비트가 단순히 데이터 형식 변환 루틴을 이해하지 못합니다.

그래서 오류 메시지가 표시됩니다. 두 번째 요점은 "ID"의 기본 열이 실제로 NVARCHAR 열이므로 처음에 형식 변환이있는 이유가 분명하지 않다는 것입니다. 내 경험상, 이러한 종류의 변환은 암시 적 전환으로 인해 발생하며 개발자가 신경 쓰지 않았습니다. 예 : "XYZ :: DATA"(뷰 또는 테이블 함수 일 수 있음)의 리턴 유형 정의가 숫자로 선언되었을 수 있습니다. 간과하기 쉽고 드물지 않습니다.

잘못된 형식 선언을 찾을 수없는 경우 모든 DDL을 게시하여 문제를 재현하십시오.