stored-procedures - Oracle 存储过程中的 Unicode

标签 stored-procedures unicode oracle10g

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#中的标题

所以请帮助。

最佳答案

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 不会注意到,直接将所有字符二进制传输,无需转换。

请更新您的问题以反射(reflect)它返回的内容而不是倒置的问号。

此转换发生在所有数据、列名称或列内容中。

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

客户代码

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

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

分布式数据库

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

关于stored-procedures - Oracle 存储过程中的 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6578409/

相关文章:

mysql - 将 MSSQL 存储过程传输到 MySQL

c# - 使用 C# 在 SQL Server 中执行插入命令并返回插入的 Id

delphi - Inno Setup Delphi DLL中的Unicode版本和字符串参数

java - 一个字符串包含多少字节?

Oracle直接加载似乎会产生奇怪的结果

plsql - 在PL/SQL中运行forall循环时,是否需要事后提交?

sql-server - 如何按周顺序显示记录

sql-server - 如果表值参数为空,则获取所有记录

java - 解耦 JSON 服务中 unicode 转义导致的安全漏洞?

php - 'is_numeric' 对 sql 注入(inject)有多安全