Xác định bộ ký tự máy khách phiên của Oracle?


9

Tôi biết cách bộ ký tự cơ sở dữ liệu ( NLS_CHARACTERSETtrong select * from v$nls_parameters;) và bộ ký tự máy khách (cài đặt môi trường máy khách NLS_LANG) tương tác với nhau.

Tuy nhiên, điều tôi không thể tìm ra là làm thế nào hoặc nếu tôi có thể xác định, đối với một phiên đã được thiết lập , Oracle nghĩ gì về bộ ký tự máy khách hiện tại.

cái này nó có hoàn toàn có thể xảy ra được không?

Lưu ý: SELECT * FROM NLS_SESSION_PARAMETERS;không không bao gồm các bộ ký tự (trên 10g2).

Để làm rõ hoàn toàn những gì tôi muốn thực hiện:

  1. NLS_LANG được đặt trong môi trường máy khách thành một giá trị tùy ý (ví dụ GERMAN_GERMANY.WE8MSWIN1252)
  2. Ứng dụng cơ sở dữ liệu [*] khởi động và thiết lập kết nối / phiên tới cơ sở dữ liệu Oracle.
  3. Ứng dụng cơ sở dữ liệu [*] muốn "hỏi" Oracle (không phải môi trường HĐH của nó) bộ ký tự khách là gì mà Oracle sẽ đảm nhận.

[*]: Nếu ứng dụng db là sqlplus, ví dụ sẽ như sau:

...
sqlplus /nolog
connect user/pass@example
*magic command*;
   CLIENT CHARACTERSET = ...

Ghi chú của Jack trong câu trả lời của ông nêu lên hai điểm quan trọng:

  • Với Oracle, người dịch thuật nhân vật. Đây có phải là mã thư viện khách hay nó được thực hiện ở phía máy chủ?
  • Khi nó xuất hiện, nó là máy khách, máy khách sẽ cần hiển thị cài đặt này - công cụ lib / công cụ của máy khách giả định cài đặt này là gì. Có bất kỳ lib / công cụ máy khách nào của Oracle (sqlplus, OCI / OCCI, Pro * C, ...) có thể được truy vấn cho những gì nó nghĩ rằng cài đặt này không?

Câu trả lời:


9

Tôi hơi nghi ngờ rằng đây chính xác là những gì bạn đang tìm kiếm, nhưng

host echo %nls_lang%;

ENGLISH_UNITED KINGDOM.WE8ISO8859P1

hiển thị biến môi trường nls_lang của máy khách trên máy khách.

Tôi không nghĩ sẽ có một truy vấn SQL mà bạn có thể chạy để đưa ra cài đặt 'hiện tại' vì AFAIK máy chủ không biết dịch thuật nào được thực hiện phía máy khách, vì vậy, bất kỳ lệnh nào để hiển thị cài đặt hiện tại sẽ phải là gốc cho khách hàng - Tôi đã sử dụng SQL Developer cho lệnh trên, nhưng tôi cho rằng nó sẽ hoạt động tương tự trong SQL * Plus

--biên tập

từ AskTom :

chỉ khách hàng mới biết bộ ký tự của họ - nó không có sẵn "trong cơ sở dữ liệu"

bộ ký tự mô tả những gì được lưu trữ trong cơ sở dữ liệu.

khách hàng thực hiện mong muốn được dịch sang ký tự biết [sic] sang cơ sở dữ liệu thông qua việc giải quyết NLS_LANG.

Nếu bạn ở trên 11.1+, bạn có thể có một chút niềm vui với v $ session_connect_info, bởi vì:

Thông tin này được OCI đẩy đến máy chủ ats thời gian đăng nhập.

Nhưng tôi phát hiện ra rằng nó vẫn sẽ phụ thuộc vào cách bạn kết nối, ví dụ như từ Trình điều khiển mỏng JDBC mà bạn không sử dụng OCI và vì vậy thông tin không được đẩy


Chà, không, đó chính xác không phải là điều tôi đang tìm kiếm :-) - Nhưng bạn nêu ra (hai) điểm quan trọng, và nếu nó đúng, tôi đoán đó sẽ là một câu trả lời chấp nhận được. Tôi sẽ thêm hai điểm vào câu hỏi.
Martin

Bah! (không đổ lỗi cho bạn) Nhưng Oracle thực sự có nó: "chỉ khách hàng mới biết bộ ký tự của họ - nó không có sẵn" trong cơ sở dữ liệu " " và "khách hàng làm cho ... biết đến cơ sở dữ liệu thông qua NLS_LANG" thực sự khá nói ngược lại, không? :-)
Martin

Có bạn đúng mặc dù Tom <> Oracle. Tôi nghĩ rằng anh ấy đang vấp phải những lời nói của mình - rằng toàn bộ chủ đề rất đáng để lướt qua ...
Jack nói hãy thử topanswers.xyz

1
Câu trả lời được chấp nhận cho liên kết thứ nhất - bởi vì câu hỏi này trên Ask Tom (từ 2002) thực sự hỏi điều tương tự "Tôi muốn biết liệu có thể kiểm tra cài đặt NLS_LANG của khách hàng trong bất kỳ chế độ xem v $ hoặc nls_ nào khi được kết nối với kho dữ liệu."
Martin

0

Bạn có thể thấy như sau :

  • NLS_CALENDAR
  • NLS_CURRENCY
  • NLS_DATE_FORMAT
  • NLS_DATE_LANGUAGE
  • NLS_SORT
  • NLS_TERRITORY

Ví dụ:

SQL> select sys_context('USERENV', 'NLS_TERRITORY') from dual;

SYS_CONTEXT('USERENV','NLS_TERRITORY')
--------------------------------------------------------------------------------
UNITED KINGDOM

1 row selected.

Tôi đoán đề cập đến sys_context ở đây là hữu ích. Nếu không, điều này không giải quyết vấn đề của ký tự nào .
Martin

Quan điểm của tôi là đây là những điều duy nhất mà máy chủ biết (hoặc quan tâm).
Gaius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.