Stored procedures Oracle存储过程中的Unicode

Stored procedures Oracle存储过程中的Unicode,stored-procedures,unicode,oracle10g,Stored Procedures,Unicode,Oracle10g,BillNo As?是unicode,但oracle在尝试以C显示在DataGrid标头时没有返回 因此,请提供帮助。Oracle支持在列名中使用Unicode。所列出的结构已知有效。然而,有几个地方出现了问题。生活在荷兰,在Oracle中使用多种外语,由于使用Unicode,在应用程序或Oracle内核中遇到另一个bug总是令人高兴的。在Oracle11.2中,大多数Unicode问题最终都得到了解决 请检查以下可能的原因: 数据库UNICODE? 你的数据库是AL32UTF吗?使用v$nls

BillNo As?是unicode,但oracle在尝试以C显示在DataGrid标头时没有返回


因此,请提供帮助。

Oracle支持在列名中使用Unicode。所列出的结构已知有效。然而,有几个地方出现了问题。生活在荷兰,在Oracle中使用多种外语,由于使用Unicode,在应用程序或Oracle内核中遇到另一个bug总是令人高兴的。在Oracle11.2中,大多数Unicode问题最终都得到了解决

请检查以下可能的原因:

数据库UNICODE? 你的数据库是AL32UTF吗?使用v$nls\u参数中的选择值,其中name='nls\u CHARACTERSET'

客户机和服务器之间不需要的转换 这可能是你的原因

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

由于C支持与Oracle几乎相同的Unicode,因此请始终使用类似“DUTCH_the NETHERLANDS.AL32UTF8”的字符集作为客户端的字符集,例如使用NLS_LANG。有关更多说明,请参阅

否则Oracle将把超出值范围的字符转换为类似“?”的字符。请注意,只有当两侧的字符集不同时,才会发生字符转换。如果两者都不正确但相同,Oracle不会注意到,只会将所有字符转换为二进制而不进行转换

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

此转换与所有数据、列名或列内容一起发生

您是否可以更新您的问题:US7ASCII范围之外的列内容是否也显示不正确

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

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

分布式数据库
除了客户机/服务器字符集转换之外,Oracle分布式数据库还可能带来额外的问题。其中涉及到一些bug。如果您使用分布式数据库,请更新问题。

如果您发现问题的答案有用,请单击答案旁边的“接受”图标,接受答案。否则,没有人会非常积极地帮助您……请阅读如何将命令传递给dbms?您确定sqlplus和/或您正在使用的shell不会损坏尼泊尔代码点吗?您是否尝试过使用其他非拉丁语代码点命名列?例如西里尔字母U+0400-U+04ff?hi@Prayag Upd这个答案对解决您的问题有帮助吗?如果没有,请在您的问题中添加不成功的内容。当答案对您有帮助时,您能否通过单击旁边的空心绿色复选标记来接受它?
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;