Как привести значение NUMBER к одному символу CHAR в Oracle? - PullRequest
3 голосов
/ 24 февраля 2012

Практически на любом обычном языке программирования можно легко преобразовать целое число / короткий / байт в символ с использованием преобразования, подобного этому

char alpha = (char)123;

Я пытаюсь сделать это в базе данных Oracle,У меня есть столбец типа CHAR (1 BYTE), и я хочу иметь возможность хранить в нем значения NUMBER (не больше 30).Функция CAST не позволяет мне сделать это.

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

, где rank является переменной NUMBER.Я получаю сообщение об ошибке:

Value from cast operand is larger than cast target size.

Как это делается в Oracle PL / SQL?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

Согласно моему комментарию к ответу @ Northpole ...

Ближайшее к тому, что вы хотите, может быть не совсем правильным, но функция CHR преобразует число в его эквивалент ascii.
то есть alpha := chr(113); поместит символ "q" в альфа-переменную, сохраняя тем самым числовое значение "113" в виде одного байта.

1 голос
/ 24 февраля 2012

У вас есть пара вариантов.Вы можете использовать TO_CHAR и сделать что-то вроде:

TO_CHAR(rank,'99')

Или использовать функцию CAST и исправить вашу попытку, предоставив больший CHAR:

CAST(rank as CHAR(2))

Причина в том, как описал Оллив своем комментарии.

0 голосов
/ 24 февраля 2012

Вы можете попробовать это:

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