Oracle数据库查询中的NLS_LANG参数设置

在处理多语言设置,如美式英语(AMERICAN)和德语(GERMAN)时,可能在使用原生Oracle数据库(例如sqlplus)查询日期字段时遇到过"ORA-01843: not a valid month"的错误。当使用ODBC(可能来自VBScript)时,这个问题更加严重,因为如果选择日期字段,将得不到任何行。本文将向展示如何在数据库脚本中确保使用正确的NLS_LANG参数。

首先,通过VBScript调整脚本的进程环境:

Dim oShell Set oShell = WScript.CreateObject("WScript.Shell") Dim oEnv Set oEnv = oShell.Environment("PROCESS") oEnv.Item("NLS_LANG") = "AMERICAN_AMERICA.WE8ISO8859P1" WScript.Echo oEnv.Item("NLS_LANG")

首先使用CreateObject("WScript.Shell")访问当前的shell。通过shell,可以访问当前进程的环境。现在可以为NLS_LANG参数设置一个正确的值。通过这段代码,可以确保脚本运行时NLS_LANG参数设置正确。不再需要担心客户机上的注册表设置。

以下是完整的脚本,它将NLS_LANG设置为AMERICAN_AMERICA.WE8ISO8859P1,查询数据库并将结果写入STDOUT:

Dim strCon strCon = "Driver={Microsoft ODBC for Oracle}; " & _ "CONNECTSTRING=; uid=read;pwd=read;" ' 设置NLS_LANG为AMERICAN_AMERICA Dim oShell Set oShell = WScript.CreateObject("WScript.Shell") Dim oEnv Set oEnv = oShell.Environment("PROCESS") oEnv.Item("NLS_LANG") = "AMERICAN_AMERICA.WE8ISO8859P1" WScript.Echo oEnv.Item("NLS_LANG") ' 查询语句 Dim strSql strSql = "SELECT myfield from mytable" Dim oCon Set oCon = WScript.CreateObject("ADODB.Connection") Dim oRs Set oRs = WScript.CreateObject("ADODB.Recordset") oCon.Open strCon Set oRs = oCon.Execute(strSql) While Not oRs.EOF WScript.Echo oRs.Fields(0).Value & _ " " & oRs.Fields(1).Value oRs.MoveNext Wend oCon.Close Set oRs = Nothing Set oCon = Nothing Set oCon = Nothing
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485