65.9K
CodeProject 正在变化。 阅读更多。
Home

使用多个Oracle Homes时 nls_lang

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2005 年 11 月 1 日

CPOL

1分钟阅读

viewsIcon

54439

downloadIcon

281

使用多个Oracle Homes时 nls_lang

Sample Image - nls_lang.jpg

引言

你是否曾经在使用多个 Oracle Home 的情况下使用过 Oracle,可能是在不同的语言设置下,例如 AMERICAN 和 GERMAN?那么你可能在原生 Oracle (例如 sqlplus) 中选择日期字段时遇到过以下问题:“ORA-01843: not a valid month”。当使用 ODBC (可能来自 VBScript) 时,这个问题会更糟。然后,如果你选择一个日期字段,你将根本无法获得任何行。你可以在上面的屏幕截图中看到这一点。本文向你展示了一种确保在数据库脚本中使用正确的 NLS_LANG 参数的方法。

Using the Code

使用此代码可以避免从 VBScript 使用 ODBC 连接到 Oracle 的数据库查询中的错误。当您无法控制客户工作站上的 NLS_LANG 环境设置时,它也很有用。

在开始查询数据库之前,我们调整脚本的进程环境

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=<xxx>; uid=read;pwd=read;"         

' set NLS_LANG to 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")

' select statement
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

希望这篇文章对您有所帮助。当您无法确定最终用户在其计算机上是否具有正确的设置时,调整 NLS_LANG 参数对我来说已经很有用了。

历史

  • 2005 年 11 月 1 日:初始发布
© . All rights reserved.