Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Доброго всем.
Может такая проблема и поднималась, но я что-то не нашел.

Суть в чем:
Имеется Oracle XE universal на Ubuntu 8 и функция
CREATE OR REPLACE FUNCTION USERIDTONAME(P_USERID IN INTEGER, P_VCTEMPLATE IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
RESULT VARCHAR2(128);
TYPE TRECUSERBUFFER IS RECORD (VCFIRSTNAME USERS.VCFIRSTNAME%TYPE, VCNAME USERS.VCNAME%TYPE, VCPARENTNAME USERS.VCPARENTNAME%TYPE);
RECUSERBUFFER TRECUSERBUFFER;
BEGIN
IF P_USERID = 0 THEN RESULT := 'Администратор';
ELSE
SELECT VCFIRSTNAME, VCNAME, VCPARENTNAME INTO RECUSERBUFFER FROM USERS WHERE IUSERID = P_USERID;
RESULT := NVL(P_VCTEMPLATE, 'F I. O.');
RESULT := REPLACE(RESULT, 'F', '#F#');
RESULT := REPLACE(RESULT, 'I', '#I#');
RESULT := REPLACE(RESULT, 'O', '#O#');
IF INSTR(RESULT, '.') > 0 THEN
RESULT := REPLACE(RESULT, '#F#.', SUBSTR(RECUSERBUFFER.VCFIRSTNAME, 1, 1) || '.');
RESULT := REPLACE(RESULT, '#I#.', SUBSTR(RECUSERBUFFER.VCNAME, 1, 1) || '.');
RESULT := REPLACE(RESULT, '#O#.', SUBSTR(RECUSERBUFFER.VCPARENTNAME, 1, 1) || '.');
END IF;
IF INSTR(RESULT, '#') > 0 THEN
RESULT := REPLACE(RESULT, '#F#', RECUSERBUFFER.VCFIRSTNAME);
RESULT := REPLACE(RESULT, '#I#', RECUSERBUFFER.VCNAME);
RESULT := REPLACE(RESULT, '#O#', RECUSERBUFFER.VCPARENTNAME);
END IF;
END IF;
RETURN RESULT;
END;

так вот, в данном виде она не компилируется, ругается на
Compilation errors for FUNCTION USERIDTONAME

Error: PLS-00103: Encountered the symbol "F" when expecting one of the following:

* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_
LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
Line: 9
Text: RESULT := NVL(P_VCTEMPLATE, 'F I. O.');

Error: PLS-00103: Encountered the symbol ");
RESULT := REPLACE(RESULT, " when expecting one of the following:

<an identifier> <a double-quoted delimited-identifier>
Line: 9
Text: RESULT := NVL(P_VCTEMPLATE, 'F I. O.');
а если добавить в слово 'Администратор' пробел, или заменить его на английское слово - то все становиться хорошо.
Полдскажите как побороть данную проблему, не подставлять же везде перед кавычками пробелы.
20 авг 08, 15:48    [6089075]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
SRC
popina
Доброго всем.
Может такая проблема и поднималась, но я что-то не нашел.

Суть в чем:
Имеется Oracle XE universal на Ubuntu 8 и функция
CREATE OR REPLACE FUNCTION USERIDTONAME(P_USERID  IN INTEGER, P_VCTEMPLATE IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
  RESULT VARCHAR2(128);
  TYPE TRECUSERBUFFER IS RECORD (VCFIRSTNAME USERS.VCFIRSTNAME%TYPE, VCNAME USERS.VCNAME%TYPE, VCPARENTNAME USERS.VCPARENTNAME%TYPE);
  RECUSERBUFFER TRECUSERBUFFER;
BEGIN
  IF P_USERID = 0 THEN RESULT [b]:= 'Администратор';[/b]
  ELSE
    SELECT VCFIRSTNAME, VCNAME, VCPARENTNAME INTO RECUSERBUFFER FROM USERS WHERE IUSERID = P_USERID;
    RESULT := NVL(P_VCTEMPLATE, 'F I. O.');
    RESULT := REPLACE(RESULT, 'F', '#F#');
    RESULT := REPLACE(RESULT, 'I', '#I#');
    RESULT := REPLACE(RESULT, 'O', '#O#');
    IF INSTR(RESULT, '.') > 0 THEN
      RESULT := REPLACE(RESULT, '#F#.', SUBSTR(RECUSERBUFFER.VCFIRSTNAME, 1, 1) || '.');
      RESULT := REPLACE(RESULT, '#I#.', SUBSTR(RECUSERBUFFER.VCNAME, 1, 1) || '.');
      RESULT := REPLACE(RESULT, '#O#.', SUBSTR(RECUSERBUFFER.VCPARENTNAME, 1, 1) || '.');
    END IF;
    IF INSTR(RESULT, '#') > 0 THEN
      RESULT := REPLACE(RESULT, '#F#', RECUSERBUFFER.VCFIRSTNAME);
      RESULT := REPLACE(RESULT, '#I#', RECUSERBUFFER.VCNAME);
      RESULT := REPLACE(RESULT, '#O#', RECUSERBUFFER.VCPARENTNAME);
    END IF;
  END IF;
  RETURN RESULT;
END; 
так вот, в данном виде она не компилируется, ругается на
Compilation errors for FUNCTION USERIDTONAME

Error: PLS-00103: Encountered the symbol "F" when expecting one of the following:
       
          * & = - + ; < / > at in is mod remainder not rem
          <an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_
          LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
Line: 9
Text: RESULT := NVL(P_VCTEMPLATE, 'F I. O.');

Error: PLS-00103: Encountered the symbol ");
           RESULT := REPLACE(RESULT, " when expecting one of the following:
       
          <an identifier> <a double-quoted delimited-identifier>
Line: 9
Text: RESULT := NVL(P_VCTEMPLATE, 'F I. O.');
а если добавить в слово 'Администратор' пробел, или заменить его на английское слово - то все становиться хорошо.
Полдскажите как побороть данную проблему, не подставлять же везде перед кавычками пробелы.
20 авг 08, 15:59    [6089135]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Конечно спасибо за поправку, но вот если бы по делу
20 авг 08, 16:09    [6089224]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Сына
Member

Откуда:
Сообщений: 804
Может быть проблема в этом
popina
Имеется Oracle XE universal

Знающие берут Western European и делают такой финт ушами.
20 авг 08, 16:12    [6089241]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Igor Schevchenko
Member

Откуда: Москва
Сообщений: 394
Не знаю насчет ubunt-ы, под Windows именнo на XE (Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product) функция компилируется без ошибок
20 авг 08, 16:13    [6089254]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Igor Schevchenko
Member

Откуда: Москва
Сообщений: 394
ЗЫ: XE в Unicode
20 авг 08, 16:14    [6089259]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Кстати, если выполнить из тоада запрос
select 'Администратор' from dual 
то ругается:
ORA-01756: quoted string not properly terminated
20 авг 08, 16:21    [6089316]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
А если после Администратор поставить пробел - то все хорошо
20 авг 08, 16:22    [6089323]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
А если выполнить этот же запрос из SQLPLUS, то проблемы нет, причем выполнял и на убунте и на клиенте - Win XP
20 авг 08, 16:24    [6089338]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Сына
Member

Откуда:
Сообщений: 804
popina
А если после Администратор поставить пробел - то все хорошо

Именно пробел? Попробуйте 'Администратырр' ;) Гыг
20 авг 08, 16:26    [6089357]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
та же проблема и при выполнении запроса из Delphi 7 чезе DOA

'select ''Администратор'' from dual' 
ругается:
ORA-01756: quoted string not properly terminated,
а добавление пробела проблему решает
20 авг 08, 16:28    [6089373]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
.....
Member

Откуда:
Сообщений: 473
popina
....


не подскажете куда привильно ставить ударение в ваше нике?

pOpina или же popIna или возможно popinA?
20 авг 08, 16:40    [6089475]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Ales Protiv
Member

Откуда: Прага
Сообщений: 1872
Убунту 8
XE universal
SQLDeveloper (ничего другого под рукой нет, кроме плюса есессна)

Полет нормальный. Может дело в тулсе?
20 авг 08, 16:43    [6089497]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
.....
popina
....


не подскажете куда привильно ставить ударение в ваше нике?

pOpina или же popIna или возможно popinA?

второй вариант, если это важно
20 авг 08, 16:48    [6089545]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Ales Protiv
Убунту 8
XE universal
SQLDeveloper (ничего другого под рукой нет, кроме плюса есессна)

Полет нормальный. Может дело в тулсе?

Весь вопрос как раз в Delph
Щас переношу базу с взрослого оракла, ессно не лицензированного на експресс,
так мало того, что при импорте все русские названия корявятся, так еще и делфи запросы выполнять не хочет
20 авг 08, 16:50    [6089558]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9251
To popina:

Igor Schevchenko
ЗЫ: XE в Unicode


Какая кодировка используется в БД. Какая кодировка (NLS_LANG) выставлена на клиенте? В какой кодировке посылается/набирается запрос?
20 авг 08, 16:57    [6089621]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Leonid Kudryavtsev
To popina:

Igor Schevchenko
ЗЫ: XE в Unicode


Какая кодировка используется в БД. Какая кодировка (NLS_LANG) выставлена на клиенте? В какой кодировке посылается/набирается запрос?

На сервере:NLS_LANG=american_america.al32utf8, на клиенте в реестре - он же

SQL> show parameter nls

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_calendar                         string
nls_comp                             string
nls_currency                         string
nls_date_format                      string
nls_date_language                    string
nls_dual_currency                    string
nls_iso_currency                     string
nls_language                         string      AMERICAN
nls_length_semantics                 string      BYTE
nls_nchar_conv_excp                  string      FALSE
nls_numeric_characters               string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_sort                             string
nls_territory                        string      AMERICA
nls_time_format                      string
nls_time_tz_format                   string
nls_timestamp_format                 string
nls_timestamp_tz_format              string
20 авг 08, 17:01    [6089647]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Leonid Kudryavtsev
To popina:

Igor Schevchenko
ЗЫ: XE в Unicode


Какая кодировка используется в БД. Какая кодировка (NLS_LANG) выставлена на клиенте? В какой кодировке посылается/набирается запрос?

В какой кодировке посылается запрос - вопрос хороший, кто его знает в какой кодировке делфи запросы отправляет
20 авг 08, 17:02    [6089659]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Только что увидел, при выполнении запроса select * from table с русскими буквами на убунте все хорошо, на клиенте - абракадабры
20 авг 08, 17:05    [6089678]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
popina
кто его знает в какой кодировке делфи запросы отправляет

Насколько мне известно, компоненты Delphi 7 не поддерживают (?) unicode
20 авг 08, 17:13    [6089741]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
ну ладно делфи, а тоад и sqlplus выселекать нормально не могут это что?
20 авг 08, 17:22    [6089818]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Igor Schevchenko
Member

Откуда: Москва
Сообщений: 394
Leonid Kudryavtsev
To popina:

Igor Schevchenko
ЗЫ: XE в Unicode


Какая кодировка используется в БД. Какая кодировка (NLS_LANG) выставлена на клиенте? В какой кодировке посылается/набирается запрос?


на клиенте в реестре NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
в nls_database_parameters NLS_CHARACTERSET равен AL32UTF8

запрос посылается в кодировке ANSI :)
20 авг 08, 17:22    [6089825]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Igor Schevchenko
Member

Откуда: Москва
Сообщений: 394
popina
На сервере:NLS_LANG=american_america.al32utf8, на клиенте в реестре - он же


А на клиенте на ANSI поменять ?
20 авг 08, 17:24    [6089835]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
popina
Member

Откуда:
Сообщений: 49
Igor Schevchenko
popina
На сервере:NLS_LANG=american_america.al32utf8, на клиенте в реестре - он же


А на клиенте на ANSI поменять ?

Щас попробую, только перезагрузиться придется
20 авг 08, 17:27    [6089861]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с ковычками в Oracle XE  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9251
popina
ну ладно делфи, а тоад и sqlplus выселекать нормально не могут это что?


Это скорее всего у Вас клавиатура плохая. Клавиатура в UTF8 набирать не может. Нужна специальная клавиатура, с переменным количеством кнопок. Тогда все будет нормально )))

Ну или поискать нормальную Wide-char клавиатуру и к ней UTF8 переходник (Unicode-UTF8).
20 авг 08, 17:31    [6089894]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить