2012-02-24 31 views
3

在几乎任何普通的编程语言,可以利用类似于投投整数/短路/字节到一个char轻松地这个如何将NUMBER值赋给Oracle中的单个CHAR?

char alpha = (char)123; 

我试图做到这一点在Oracle数据库中。我有CHAR类型的列(1 BYTE),我希望能够存储NUMBER值(其中的值不会超过30)。 CAST功能不会让我这样做。

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

其中秩是一个数字的变量。我得到一个错误:

Value from cast operand is larger than cast target size.

这是如何在甲骨文的PL/SQL做了什么?

+0

您想将一个两位数字转换为一个字符的CHAR。该错误告诉你你需要知道的一切。 – Ollie 2012-02-24 14:54:40

+0

一个字符是1个字节,十进制数10可以用一个字节(00001010)表示。我正在使用'cast'这个词的定义,我作为一个程序员所使用的术语可能与SQL的定义不同。 – 2012-02-24 14:59:06

+0

“Oracle存储基数为100格式的数字,每个字节可以存储2位数字,总是为指数保留一个字节”(来自http://www.dbasupport.com/forums/showthread.php?t=17375) 。你将需要一个更大的专栏。 – Ollie 2012-02-24 15:07:39

回答

4

按我的评论@ NORTHPOLE的答案...

的最接近于要可能不完全正确的东西,但CHR功能将转换数字它是ascii等效的。
alpha := chr(113);会将字符“q”放入字母变量,从而将数字“113”存储为单个字节。

1

你有几个选项。您可以使用TO_CHAR和做类似:

TO_CHAR(rank,'99') 

或者使用CAST功能,解决您试图通过提供更大的CHAR:

CAST(rank as CHAR(2)) 

其原因是奥利在他的评论中描述。

+0

恐怕你误会了我的问题。我不想获取数字的字符串表示。我想要做的事情基本上是在一个期望单字节字符的列中存储一个单字节数字。从理论上讲,这应该很简单:一个字节的数字在一个字节的列中将非常适合。例如,在Java或C#中,我可以简单地通过说char a =(char)113来存储数字113(当显示时,敏锐的观察者会注意到三个字符长)成单字节字符变量;由此产生的字符是'q',但这与我完全无关。 – 2012-02-24 15:22:50

+2

最接近你想要的可能不完全正确,但CHR函数会将数字转换为ascii等效。即'alpha:= chr(113);'会将char“q”放入alpha变量,从而将数字“113”存储为单个字节。 – Ollie 2012-02-24 15:32:02

+0

这几乎就是我正在寻找的东西。谢谢你,Ollie。 – 2012-02-24 15:36:03

0

你可以试试这个:

SUBSTR(CAST(rank as CHAR(2)), 2, 1)