Преобразование типов в Firebird. Использование CAST

Не смотря на то, что записи в блоге я делаю редко, мысль на месте не стоит. Поэтому Вот еще одно откровение:
CAST () - как это работает?
Можно написать в гугле запрос и увидеть, что это такое. От себя хочу добавить такой вот пример процедуры.
Задача: написать процедуру, которая бы выдавала цифро-буквенный код для номера документа.

begin 
  select max(docs.id) from docs
  into :max_id; /*Выясняем номер последней записи в таблице документов*/
max_id=max_id+1; /*Увеличиваем его значение на единицу*/
doc_id=CAST (max_id AS VARCHAR(10)); /*Преобразуем число в строку длиной в 10 символов.*/
if (CHAR_LENGTH(doc_id)=1) then doc_id=doc_id||'00';
if (CHAR_LENGTH(doc_id)=2) then doc_id=doc_id||'0'; /*В зависимости от длины, добавляем нули*/
doc_id='Д'||doc_id;/*Добавляем букву в начале*/
str_date=extract (month FROM (SELECT CURRENT_DATE FROM RDB$DATABASE)); /*Выясняем номер текущего месяца*/
doc_id=doc_id||right(str_date,2); /*Присоединяем число месяца*/
str_date=extract (YEAR FROM (SELECT CURRENT_DATE FROM RDB$DATABASE)); /*Выясняем номер текущего года*/
doc_id=doc_id||right(str_date,2); /*последние 2 его цифры*/
  suspend;
end

В результате выполнения получим код документа в формате: ДXXXYYZZ
Где XXX - порядковый номер документа с нолями, YY - номер текущего месяца, ZZ - последние 2 цифры текущего года.
CAST требует обязательно указывать в строку какой длины преобразуется число.