Oracle - Как я могу использовать NLSParams для принудительного изменения языка с помощью функции TO_CHAR?

Я кодирую функцию PL/SQL для отображения словами числа, вставленного из параметра от 0 до 5000, но отображаемый результат отображается на английском языке (как вы можете проверить на скриншоте), но теперь я хочу отобразить результат на испанском языке и я читал о «NLSPARAM», предоставленном в функции TO_CHAR, но я не знаю, как я могу его закодировать. Есть ли у вас какие-либо идеи? Спасибо.

CREATE OR REPLACE FUNCTION letras_a_numeros(p_numero NUMBER)
RETURN VARCHAR2
IS
    v_enteros   NUMBER(8);
    v_decimales NUMBER(8, 2);
    v_final_decimales NUMBER(8, 2);
    v_salida    VARCHAR2(1000);
    e_invalido  EXCEPTION;
BEGIN
    IF
        p_numero NOT BETWEEN 0 AND 5000 THEN
            RAISE e_invalido;
    END IF;

    v_enteros := TRUNC(p_numero);

    v_decimales := TRUNC(p_numero);
    v_final_decimales := SUBSTR(p_numero - v_decimales, 2);

    IF
        v_enteros = 0 THEN
            v_salida := 'Cero';
    ELSE
        SELECT TO_CHAR(DATE '-4712-01-01' + (v_enteros - 1), 'JSP')
        INTO   v_salida
        FROM   dual;
    END IF;

    IF
        v_final_decimales > 0 THEN
            RETURN v_salida || ' con ' || v_final_decimales || '/100';
    ELSE
            RETURN v_salida;
    END IF;
EXCEPTION
    WHEN e_invalido THEN
        RETURN 'Número inválido, ingrese valor entre 0 y 5000';
END letras_a_numeros;

введите здесь описание изображения


person Young Al Capone    schedule 26.05.2017    source источник


Ответы (1)


Вы имеете в виду указание языка даты, например:

SELECT TO_CHAR(some_date, 'DD Mon YYYY', 'NLS_DATE_LANGUAGE=''SPANISH''') FROM ...

Но это относится к таким вещам, как названия дней и месяцев, и не будет делать то, что вы хотите здесь. Из документации:

Примечания к суффиксам элементов формата даты:

  • При добавлении одного из этих суффиксов к элементу формата даты и времени возвращаемое значение всегда будет на английском языке.
    ...

поэтому вы не можете использовать этот механизм, чтобы указать значение словами на языке, отличном от английского, к сожалению.

Вы можете видеть, что языковой параметр не имеет значения для SP с версией вашего запроса:

SELECT TO_CHAR(DATE '-4712-01-01' + (124 - 1), 'JSP', 'NLS_DATE_LANGUAGE=''SPANISH''')  OUTPUT
FROM DUAL

OUTPUT
------------------------------------------------------
ONE HUNDRED TWENTY-FOUR

Вам нужно будет преобразовать свой номер вручную; вы можете адаптировать что-то вроде этого для использования испанских слов.

person Alex Poole    schedule 26.05.2017