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
您需要手动转换号码;你可以调整 以使用西班牙语单词。
我正在编写一个 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
您需要手动转换号码;你可以调整