Юникод в хранимой процедуре Oracle - PullRequest
4 голосов
/ 05 июля 2011
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 "¿¿¿ ¿¿", Unicode в NEPALI , но oracle не возвращает «¿¿¿¿¿» при попытке отобразить в DataGrid Заголовок в C #

Так что, пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 января 2014

Oracle поддерживает использование Unicode в именах столбцов.И перечисленная конструкция, как известно, работает.Тем не менее, есть несколько мест, где дела идут плохо.Живя в Нидерландах и работая со многими иностранными языками в Oracle, всегда было приятно столкнуться с еще одной ошибкой в ​​приложении или ядре Oracle из-за использования Unicode.В Oracle 11.2 большинство проблем с Юникодом наконец решены.

Пожалуйста, проверьте следующие возможные причины:

База данных UNICODE?

Является ли ваша база данных AL32UTF?Используйте select value from v$nls_parameters where name='NLS_CHARACTERSET'

Нежелательный перевод между клиентом и сервером

Это, вероятно, ваша причина.

Правильно ли настроен ваш клиент и использует ли он необходимые параметры?

Поскольку C # поддерживает почти тот же Unicode, что и Oracle, всегда используйте что-то вроде 'DUTCH_THE NETHERLANDS.AL32UTF8' в качестве набора символов вашего клиента, например, используя NLS_LANG.Дополнительные инструкции можно найти в руководстве одного из наших пакетов программного обеспечения .

В противном случае Oracle преобразует символы из диапазона значений в нечто вроде «?».Обратите внимание, что преобразование символов ТОЛЬКО происходит, когда набор символов с обеих сторон отличается.Если они оба неверны, но идентичны, Oracle не заметит и просто передаст все двоичные символы без преобразования.

Пожалуйста, обновите свой вопрос, чтобы отразить то, что он возвращает вместо перевернутых вопросительных знаков.

Это преобразование происходит со всеми данными, именами столбцов или содержимым столбцов.

Можете ли вы обновить свой вопрос, отображается ли содержимое столбцов за пределами диапазона US7ASCII также неправильно или нет?

Код клиента

Большие части клиентского программного обеспечения не были протестированы с UNICODEперсонажи.Самый простой способ получить сбой приложения SQL часто состоит в том, чтобы ввести имена столбцов в смешанном регистре или имена столбцов UNICODE.Поскольку ваш клиентский код на C # и вы, вероятно, используете для подключения ODP.NET, это не должно быть проблемой в вашем случае.

Пока что, пожалуйста, убедитесь, что вы используете ODP.NET.

Распределенные базы данных

Распределенные базы данных Oracle также могут создавать дополнительные проблемы в дополнение к преобразованию набора символов клиент / сервер,Есть некоторые ошибки.Пожалуйста, обновите вопрос, если вы используете распределенные базы данных.

...