2012-02-24 1 views
3

, 하나는 내가 Oracle 데이터베이스에서이 작업을 수행하려고이Oracle에서 NUMBER 값을 단일 CHAR로 변환하려면 어떻게해야합니까? 거의 모든 일반적인 프로그래밍 언어에서

char alpha = (char)123; 

에 유사한 캐스트를 사용하여 쉽게 숯불로 정수/단편/바이트를 캐스팅 할 수 있습니다. CHAR (1 BYTE) 타입의 컬럼을 가지고 있고 NUMBER 값을 저장할 수 있기를 원합니다. CAST 기능은 내가하지 못하게합니다.

rank := 10; 
CAST(rank as CHAR(1)) 

여기서 rank는 NUMBER 변수입니다.

Value from cast operand is larger than cast target size.

방법이 오라클 PL/SQL로 수행됩니다 오류가 발생합니다?

+0

한 자릿수 CHAR에 두 자리 숫자를 캐스팅하려고합니다. 오류는 필요한 모든 것을 알려줍니다. – Ollie

+0

문자는 1 바이트이고 십진수 10은 1 바이트 (00001010)로 나타낼 수 있습니다. 나는 프로그래머로서 익숙한 '캐스트'라는 단어의 정의를 사용하여 SQL의 정의와 다를 수 있습니다. –

+0

"Oracle은 기본 100 형식으로 숫자를 저장합니다. 각 바이트는 2 자리수를 저장할 수 있습니다. 한 자리는 항상 지수로 예약되어 있습니다."(출처 : http://www.dbasupport.com/forums/showthread.php?t=17375) . 더 큰 칼럼이 필요합니다. – Ollie

답변

4

을 @ northpole의 대답에 ...

정확하게 맞지 않을 수 있습니다 원하는 것을 가장 가까운 있지만 CHR 기능은 숫자로 변환 할 그것에게 ascii 동등 물.
alpha := chr(113);은 알파 변수에 문자 "q"를 넣으면 숫자 "113"을 단일 바이트로 저장합니다.

1

몇 가지 옵션이 있습니다. 큰 CHAR를 제공하여

TO_CHAR(rank,'99') 

또는 CAST 함수를 사용하고 시도를 수정 : 당신은 TO_CHAR를 사용하여 같은 작업을 수행 할 수 있습니다 올리 그의 코멘트에 설명 된대로

CAST(rank as CHAR(2)) 

그 이유입니다.

+0

당신이 내 문제를 오해 할까 봐 걱정됩니다. 숫자의 문자열 표현을 얻으려고하지 않습니다. 내가 뭘 하려는지 기본적으로 단일 바이트 문자를 기대하는 열에있는 단일 바이트 번호를 저장하는 것입니다. 이론상으로 이것은 간단해야합니다 : 1 바이트 숫자는 1 바이트 열에 완벽하게 맞을 것입니다. 예를 들어, 자바 나 C#에서는 char a = (char) 113을 쓰면 숫자 113을 볼 수 있습니다 (예 : 눈에 보이는 관찰자는 3 문자 길이로 표시됨). 결과 캐릭터는 'q'이지만 완전히 저와 관련이 없습니다. –

+2

원하는 것과 가장 가까운 것이 정확하지 않을 수도 있지만 CHR 함수는 숫자를 ASCII와 동등한 것으로 변환합니다. 즉'alpha : = chr (113); '는 알파 변수에 char "q"를 넣을 것이므로 숫자 "113"을 단일 바이트로 저장합니다. – Ollie

+0

거의 정확히 내가 찾고있는 것입니다. 고마워, Ollie. –

0

이 작업을 시도 할 수 : 내 의견으로 당

SUBSTR(CAST(rank as CHAR(2)), 2, 1) 
관련 문제