【问题标题】:Unicode in Oracle Stored ProcedureOracle 存储过程中的 Unicode
【发布时间】:2011-07-05 05:52:38
【问题描述】:
create or replace PROCEDURE SP_GETINCOMEENTRY
( idec IN NUMBER := 1
, p_IncomeID     tbl_income.incomeid%type      := 1
, P_Data     Out Sys_Refcursor
, P_Fromdate     tbl_acc_income.Dateeng%Type   := null
, P_ToDate       tbl_acc_income.Entrydate%type := null
)  
is
begin    
  if idec=1
  then
    open p_DATA 
    for 
    SELECT INCOMEID as ID
    ,      INCOMENAME as Name 
    FROM   TBL_INCOME 
    order 
    by     p_IncomeID
    ;
  else 
    if Idec=2
    then
      OPEN P_DATA 
      FOR 
      Select Incomeid As id
      ,      Billno As "¿¿¿ ¿¿"
      ,      Relatedperson As "AccountHolder"
      ,      Incomesourid As "IncomeID"
      ,      Dateeng As"EnglishDate"
      ,      Remarks As "Remarks"
      ,      Amount As "Amount"
      ,      Username As "UserName"
      ,      Entrydate As "EntryDate" 
      from   Tbl_Acc_Income 
      where  Tbl_Acc_Income.dateeng between P_Fromdate and P_Todate 
      order 
      by     INCOMEID
      ;
    end if;
  end if;
end;

BillNo As "¿¿¿ ¿¿",在 NEPALI 中是 unicode,但 oracle 在尝试显示在 DataGrid C# 中的标头时未返回“¿¿¿ ¿¿”

所以请帮忙。

【问题讨论】:

  • 您应该“接受”对问题的回答,如果您发现它们有用(通过单击答案旁边的接受图标)。否则没有人会非常积极地帮助你......
  • 如何将命令中继到 dbms?您确定您使用的 sqlplus 和/或 shell 不会破坏尼泊尔语代码点吗?您是否尝试过使用其他非拉丁代码点来命名列(例如,您可以尝试西里尔文 (U+0400 - U+04ff))?
  • 嗨@Prayag Upd 这个答案对解决您的问题有帮助吗?如果不是,请在您的问题中添加不成功的内容。当答案对您有帮助时,您是否可以通过单击旁边的空心绿色复选标记来接受它?

标签: stored-procedures unicode oracle10g


【解决方案1】:

Oracle 支持在列名中使用 Unicode。并且列出的构造是已知的。但是,有几个地方出了问题。生活在荷兰并在 Oracle 中使用多种外语,由于使用 Unicode,在应用程序或 Oracle 内核中遇到另一个错误总是很高兴。在 Oracle 11.2 中,大多数 Unicode 问题终于得到解决。

请检查以下可能的原因:

数据库 UNICODE?

您的数据库是 AL32UTF 吗?使用select value from v$nls_parameters where name='NLS_CHARACTERSET'

客户端和服务器之间不需要的转换

这可能是你的原因。

您的客户端配置正确吗?它是否使用了所需的设置?

由于 C# 支持与 Oracle 几乎相同的 Unicode,请始终使用“DUTCH_THE NETHERLANDS.AL32UTF8”之类的内容作为客户端的字符集,例如使用 NLS_LANG。更多说明请见manual of one of our software packages

否则,Oracle 会将值范围外的字符转换为“?”之类的字符。请注意,仅当双方的字符集不同时才会进行字符转换。如果它们都不正确但相同,Oracle 将不会注意到并且只是将所有字符二进制传输而不转换。

请更新您的问题以反映它返回的内容,而不是颠倒的问号。

所有数据、列名或列内容都会发生这种转换。

您能否更新您的问题,US7ASCII 范围之外的列内容是否也显示不正确?

客户代码

大部分客户端软件尚未使用 UNICODE 字符进行测试。使 SQL 应用程序崩溃的最简单方法通常是引入大小写混合的列名或 UNICODE 列名。由于您的客户端代码是 C# 并且您可能正在使用 ODP.NET 进行连接,因此在您的情况下这应该不是问题。

现在,请检查您是否正在运行 ODP.NET。

分布式数据库

除了客户端/服务器字符集转换之外,Oracle 分布式数据库还可能引入额外的问题。涉及一些错误。如果您使用分布式数据库,请更新问题。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 2011-01-03
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多