Существует ограничение при использовании Julian dates
, оно находится в диапазоне от 1 to 5373484
. Вот почему, если вы поставите значения после 5373484
, он выдаст вам ошибку, как показано ниже:
ORA-01854: julian date must be between 1 and 5373484
Чтобы удовлетворить вышеупомянутую проблему, создать функцию, и с небольшим трюком с j-> JSP, вы можете получить желаемый результат.
CREATE OR REPLACE FUNCTION spell_number (p_number IN NUMBER)
RETURN VARCHAR2
AS
TYPE myArray IS TABLE OF VARCHAR2 (255);
v_decimal PLS_INTEGER;
l_str myArray
:= myArray ('',
' thousand ',
' million ',
' billion ',
' trillion ',
' quadrillion ',
' quintillion ',
' sextillion ',
' septillion ',
' octillion ',
' nonillion ',
' decillion ',
' undecillion ',
' duodecillion ');
l_num VARCHAR2 (50) DEFAULT TRUNC (p_number);
l_return VARCHAR2 (4000);
BEGIN
FOR i IN 1 .. l_str.COUNT
LOOP
EXIT WHEN l_num IS NULL;
IF (SUBSTR (l_num, LENGTH (l_num) - 2, 3) <> 0)
THEN
l_return :=
TO_CHAR (TO_DATE (SUBSTR (l_num, LENGTH (l_num) - 2, 3), 'J'),
'Jsp')
|| l_str (i)
|| l_return;
END IF;
l_num := SUBSTR (l_num, 1, LENGTH (l_num) - 3);
END LOOP;
v_decimal := 100* (p_number -TRUNC(p_number)) ;
IF v_decimal>0 THEN
RETURN l_return ||' Dollars AND '||TO_CHAR (TO_DATE (v_decimal, 'j'), 'jsp')|| ' Cents';
ELSE
RETURN l_return ||' Dollars' ;
END IF;
END;
/
select spell_number(122344343444444.23) from dual;
Выход:
Сто двадцать два триллиона триста сорок четыре миллиарда триста сорок три миллиона четыреста сорок четыре тысячи четыреста сорок четыре доллара и двадцать три Cents Blog Link
Спасибо Noel..It работает для меня ... – user2090701
@noel: существует ограничение при использовании юлианских дат, оно колеблется от 1 до 5373484. Вот почему, если вы поместите значения после 5373484, это бросит вас ошибка, как показано ниже: 'ORA-01854: дата julian должна быть между 1 и 5373484', как описано в вопросе, номер может содержать 18 цифр, тогда эта ситуация возможна –
@GauravSoni: oops ... – Noel