Oracle - 如何使用 NLSParams 强制使用 TO_CHAR 函数更改语言?

Oracle - How can I use NLSParams to force change language using TO_CHAR function?

我正在编写一个 PL/SQL 函数,用文字显示从 0 到 5000 之间的参数插入的数字,但显示的结果是英文的(您可以在屏幕截图中查看),但现在我想用西班牙语显示结果,我读到了 TO_CHAR 函数中提供的 "NLSPARAM",但我不知道如何编写代码。你有什么主意吗?谢谢

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;

您指的是指定日期语言,例如:

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

但这适用于日期和月份名称之类的内容,并且不会按照您的要求进行操作。 From the documentation:

Notes on date format element suffixes:

  • When you add one of these suffixes to a datetime format element, the return value is always in English.
    ...

所以很遗憾,您不能使用此机制以英语以外的语言拼出单词的值。

您可以看到语言参数对 SP 与您的查询版本没有区别:

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

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

您需要手动转换号码;你可以调整 以使用西班牙语单词。