powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по 8 Ораклу и сонверсии типов
7 сообщений из 7, страница 1 из 1
Вопрос по 8 Ораклу и сонверсии типов
    #32189995
johnRSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа..
Имеем Оракл 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
Вопрос по 8 Ораклу и сонверсии типов
    #32190023
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй 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
Вопрос по 8 Ораклу и сонверсии типов
    #32190066
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно...

Проверил на 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
Вопрос по 8 Ораклу и сонверсии типов
    #32190084
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Al

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

PS
На 9.0 тоже no rows selected
...
Рейтинг: 0 / 0
Вопрос по 8 Ораклу и сонверсии типов
    #32190107
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос по 8 Ораклу и сонверсии типов
    #32190108
johnRSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Al

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

PS
На 9.0 тоже no rows selected



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

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

to all

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


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