数据库服务器字符集,其来源于 props$,是表示数据库的字符集。
SELECT * FROM nls_database_parameters;
客户端字符集,其来源于 v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
SELECT * FROM nls_instance_parameters;
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符
会话字符集,其来源于 v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是 alter session 完成,
如果会话没有特殊的设置,将与 nls_instance_parameters 一致。
SELECT * FROM nls_session_parameters;
--alter session
ALTER session SET nls_language = 'AMERICAN';
ALTER session SET nls_language = 'SIMPLIFIED CHINESE';
--demo实例
DECLARE
v_sql VARCHAR2(100);
l_language VARCHAR2(30);
BEGIN
v_sql := 'alter session set nls_language =' || '''AMERICAN''';
EXECUTE IMMEDIATE v_sql;
SELECT nip.value
INTO l_language
FROM nls_session_parameters nip
WHERE nip.parameter = 'NLS_LANGUAGE';
dbms_output.put_line('l_LANGUAGE:' || l_language);
EXCEPTION
WHEN OTHERS THEN
fnd_file.put_line(fnd_file.output, '语言改变失败!');
END;
注:如果多个设置存在的时候,alter session>环境变量>注册表>参数文件。
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
--语言设置
SELECT userenv('language') FROM dual;
浙公网安备 33010602011771号