Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по 8 Ораклу и сонверсии типов / 7 сообщений из 7, страница 1 из 1
24.06.2003, 10:51:42
    #32189995
johnRSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
Господа..
Имеем Оракл 8 и :

SQL> create table t24 (name char(250));

Таблица создана.

SQL> create table t25 (name varchar2(30));

Таблица создана.

SQL> insert into t24 values ('SYSDBA');

1 строка создана.

SQL> insert into t25 values ('SYSDBA');

1 строка создана.

SQL> select t24.name from t24, t25 where t24.name = t25.name and t24.name = 'SYSDBA';

строки не выбраны

В то время как на 9 Оракле все пучком.
Я понимаю, что собака где - то порылась в типах данных.
С одной стороны это char, с другой varchar2.
Но все же.. как устранить эту ситуацию и почему она возникает?

Спасибо.
...
Рейтинг: 0 / 0
24.06.2003, 11:12:32
    #32190023
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
Используй trim

проверка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select length(t24.name), '[' || t24.name || ']' as char_name,
   2   length(t25.name), '[' || t25.name || ']' as varchar_name from t24, t25;

LENGTH(T24.NAME)
 ----------------
 
CHAR_NAME
 --------------------------------------------------------------------------------
 

LENGTH(T25.NAME) VARCHAR_NAME
 ---------------- --------------------------------
 
              250 
[SYSDBA


           ]
                6  [SYSDBA]


решение

Код: plaintext
1.
2.
3.
4.
5.
SQL> select t24.name from t24, t25 where trim(' ' from t24.name) = t25.name;

NAME
 ------------------------
 
SYSDBA
...
Рейтинг: 0 / 0
24.06.2003, 11:41:59
    #32190066
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
Странно...

Проверил на 9.2 - no rows selected.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> create table t24 (name char( 250 )); 

Table created.

SQL> create table t25 (name varchar2( 30 )); 

Table created.

SQL> insert into t24 values ('SYSDBA'); 

 1  row created.

SQL> insert into t25 values ('SYSDBA'); 

 1  row created.

SQL> select t24.name from t24, t25 where t24.name = t25.name and t24.name = 'SYSDBA'; 

no rows selected
...
Рейтинг: 0 / 0
24.06.2003, 11:49:48
    #32190084
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
to Al

Это вы по поводу В то время как на 9 Оракле все пучком. ?

PS
На 9.0 тоже no rows selected
...
Рейтинг: 0 / 0
24.06.2003, 12:08:47
    #32190107
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
As Al's example shows in 9i все пучком - statement does not return any rows as it supposed to be . Read about Blank-Padded Comparison Semantics and Nonpadded Comparison Semantics. If one of the operands is VARCHAR2, Oracle will use Nonpadded Comparison Semantics. As a result, t24.name is not equal to t25.name, since "If two values of different length are identical up to the end of the shorter one, the longer value is considered greater". At the same time t24.name = 'SYSDBA' is true since here Oracle uses Blank-Padded Comparison Semantics (t24.name is CHAR). One thing to remember is text literals. They are treated as either CHAR or VARCHAR2 depending on circumstances ("Text literals have properties of both the CHAR and VARCHAR2 datatypes"). For example in t24.name = 'SYSDBA' literal 'SYSDBA' is treated as CHAR to match t24.name while in t25.name = 'SYSDBA' literal 'SYSDBA' is treated as VARCHAR2 to match t25.name. And when comparing two literals they both are treated as CHAR enforcing Blank-Padded Comparison Semantics. For example 'SYSDBA' = 'SYSDBA ' is TRUE.

SY
...
Рейтинг: 0 / 0
24.06.2003, 12:09:08
    #32190108
johnRSDN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
to Al

Это вы по поводу В то время как на 9 Оракле все пучком.?

PS
На 9.0 тоже no rows selected



Чес слово.. у меня все ок... на 9-ке
...
Рейтинг: 0 / 0
24.06.2003, 12:26:13
    #32190137
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по 8 Ораклу и сонверсии типов
to johnRSDN

Все пучком в смысле строки возвращаются?

to all

А параметр blank_trimming влияет на сравнение?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по 8 Ораклу и сонверсии типов / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]